我正在比较两个列表。
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()
,它再次要求类型转换。编译器要求再次添加强制类型转换。如果我错过了什么,有人可以提出建议吗?
编辑1:
id 是 long 类型,否则我可以使用 ((GroupData)p).getId()
编辑2: 修改了 Joop 回答的代码,但得到了相同的错误
最佳答案
你可以尝试使用这样的东西:
allUserGroups.stream()
.map(GroupData.class::cast)
.map(GroupData::getID)
.anyMatch(confUserGroups.contains)
例如使用String
类:
List<Object> list = Arrays.asList("a","ab","abc");
list.stream()
.map(String.class::cast) // cast to String
.map(String::getBytes) // call getBytes on every element
.forEach(System.out::println);
关于java - 在 Java 8 中使用映射函数时类型转换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235965/