java - 在 Java 8 中使用映射函数时类型转换不起作用

标签 java list lambda functional-programming

我正在比较两个列表。

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 回答的代码,但得到了相同的错误

enter image description here

最佳答案

你可以尝试使用这样的东西:

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/

相关文章:

java - 创建具有特定要求的随机数字字符串

java - 鼠标的坐标?

java - 使用 jComboBox 从数据库中过滤 jTable 数据

java - 如何从给定范围构建 LocalDate 列表?

Java Lambda Stream group By 和求和整数值/平均值

java - intellij idea 报告无法为自定义 spring-boot-starter 模块 Autowiring beans

python - 将字符串转换为整数

java - 从 Java 中的 int 列表生成唯一键

java - 如何使用 Java 8 Lambda 表达式将一种类型的列表转换为其子类型的列表

c++ - 可以对 lambda 函数进行模板化吗?