【发布时间】:2017-12-27 09:43:49
【问题描述】:
我正在比较两个列表。
List allUserGroups = UserBC.getAllGroupsForUser(userId, deptID);
List<String> confUserGroups= Arrays.asList(configuredSet);
列表一返回我需要类型转换为 GroupData 实体的对象。 GroupData 有多个字段,并且想要比较字段“id”之一。所以我使用 map 函数进行如下类型转换,
isValuePresent = allUserGroups.stream().map(p -> (GroupData) p).anyMatch(p -> confUserGroups.contains(p.getId()));
问题是,p.getId() 再次要求进行类型转换。编译器要求再次添加演员表。如果我错过了什么,任何人都可以提出建议。
EDIT1:
id 是 long 类型,否则我可以使用 ((GroupData)p).getId()
EDIT2: 修改了Joop回答的代码,但得到同样的错误
【问题讨论】:
-
你能给我们一个错误信息吗?
-
您应该可以跳过
map部分。只需在((GroupData)p).getId()上进行投射 -
@jensgram 我已经编辑了我的问题。这里的问题是“id”是长类型的,我再次需要将其转换为字符串以进行比较。这就是我进行类型转换的原因
-
@VikasYadav 你错过了一个额外的演员
.map(GroupData::getId).anyMatch(configuredVipUsetGroups::contains) -
@AntonBalaniuc 我也试过了,
isValuePresent = allUserGroups.stream() .map(GroupData.class::cast) .map(GroupData::getId) .anyMatch(confUserGroups::contains);但是在这里得到,'GroupData 类型没有定义适用于此的 getId(Object)',因为 getId 没有任何参数。
标签: java list lambda functional-programming