【发布时间】:2017-07-27 16:58:02
【问题描述】:
这是我的this question的扩展
我想从下面的列表中获取 id,
List allUserGroups = UserBC.getAllGroupsForUser(userId, deptID);
此列表包含我需要类型转换为 GroupData 实体的对象。 GroupData 扩展了其中定义了 getId() 方法的 PartyData。所以我尝试使用labda作为,
allUserGroups.stream()
.map(GroupData.class::cast)
.map(GroupData::getId)
这里的问题是,编译器显示类型 GroupData 没有定义适用于这里的 getId(Object)。
GroupData 类型没有定义这里适用的getId(Object)
正常的for循环可以正常工作,
for(Object userGroup: allUserGroups){
long usergrp = ((GroupData) userGroup ).getId();
}
谁能建议如何使用 Labmda 实现这一目标
【问题讨论】:
-
你为什么使用原始列表作为
allUserGroups的类型? -
这个已经在我们的应用程序中实现了。所以我没有使用通用列表的选项。
-
由于使用了原始类型而发生此错误。将您的列表转换为通用类型:
List<GroupData> allUserGroups = (List<GroupData>) UserBC.getAllGroupsForUser(userId, deptID);,那么您也不再需要第一个map。 -
不安全的演员表不应该是必要的。
UserBC.getAllGroupsForUser()的返回类型是什么? -
那么完全不需要演员阵容;您可以按原样分配结果。如果您想避免编译器警告,您可以将结果分配给
List<?>,您的原始代码应该可以工作。这一切都假设你不能修改方法签名,它不应该首先使用原始类型。
标签: java lambda casting functional-programming java-8