Java-8 使用 lambda 过滤两个集合

标签 java lambda java-8 java-stream

我有两套角色。一个来自数据库,另一个来自 UI。我还根据角色的名称编写了两个角色的比较方法。

问题:如果使用 lambda 表达式比较值返回 true,我想提取角色(从数据库中保留一个角色)。

matchingRoleNames 工作得很好,但我正在寻找最好的 lambda 实践来做到这一点,而无需 for 循环。 这是我设置的结果,效果很好:

Set<Role> rolesFromUI = user.getRolesFromUI();
Stream <Role> roleStreamFromDB = roleService.getAllRolesStreamFromDatabase();

Set<Role> matchingRoleNames = roleStreamFromDB.filter(role-> 
        {   
            for(Role roleTmp:rolesFromUI){
                if(roleTmp.compareTo(role)==0){
                    return true;
                }
            }
            return false;
        })

public int compareTo(Role role){
      return this.roleName.compareTo(role.getRoleName());       
}

谢谢

最佳答案

您可以直接流过其他集合并查看其中的任何元素是否与第一个流的任何元素匹配,而不是在第一个流的 filter 中间操作中使用 foreach 循环溪流。

即:

Set<Role> matchingRoleNames = roleStreamFromDB.filter(e -> rolesFromUI.stream().anyMatch( x -> x.compareTo(e) == 0))
                                              .collect(Collectors.toSet());

关于Java-8 使用 lambda 过滤两个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47121474/

相关文章:

java - 排序 List<Object> 以日期为字符串类型的日期为准

java - 如何用Gson解析响应

java - 在 Linux 中将 Java URL 转换为有效的文件路径

c++ - 支持 C++14 lambda 的 ros 包

rest - 部署在 Tomcat (java 7) 上时 Rest Web Service (java 8) 的兼容性问题

java - 在 LocalDate 和 XMLGregorianCalendar 之间转换

java - 在hibernate Spring java中删除数据库中的所有对象

java - 在不使用 hibernate.hbm2ddl.auto 的情况下,如何将所有初始模式导出到 Flyway?

android - 我可以使用 lambda 表达式来替换仅用一个抽象方法实例化抽象类吗?

python - 如何解决 + : 'int' and 'tuple' because of trying to return 2 values with lambda? 不受支持的操作数类型