java - 从 Java 7 迁移到 Java 8,迭代时间长的问题

标签 java java-stream

我正在尝试使用 lambda 表达式/流在 Java8 中迁移 ForEach 的愚蠢白痴 4 调用,但我正在努力

这是我所做的(为了更好地理解替换名称)

companySiteList.stream()
.filter(companySite -> companySite.getId().equals("ID"))
.map(obj -> obj.getEmployeeList().stream()
    .filter(employee -> employee.getId().equals("ID_EMPLOYEE"))
    . ... ???
)


private void orderFurniture(Company company, Employee employee) {
    // code
}

我需要为匹配这两个过滤器的员工调用函数 orderFurniture。只有一名员工可以匹配两个过滤器

编辑:

这是我尝试迁移的原始代码

for(Company company : companySiteList) {
    if(company.getId().equals("ID")) {
        for(Employee employee : company.getEmployeeList()) {
            if(employee.getId().equals("ID_EMPLOYEE")) {
                orderFurniture(company, employee);    
            }
        }
    }
}

谢谢

最佳答案

您可以使用 flatMap 而不是 map 来获取所有通过这两个参数的 EmployeeStream过滤器,然后使用 forEach 调用方法:

companySiteList.stream()
               .filter(companySite -> companySite.getId().equals("ID"))
               .flatMap(obj -> obj.getEmployeeList
                                  .stream()
                                  .filter(employee -> employee.getId().equals("ID_EMPLOYEE")))
               .forEach(emp -> orderFurniture ("ID","ID_EMPLOYEE"));

这取决于您的假设“只有一名员工可以匹配两个过滤器”。否则,将为多个 Employees 调用该方法。

好的,如果您需要将实际对象传递给方法调用,则必须存储相关EmployeeCompany:

companySiteList.stream()
               .filter(companySite -> companySite.getId().equals("ID"))
               .flatMap(obj -> obj.getEmployeeList
                                  .stream()
                                  .filter(employee -> employee.getId().equals("ID_EMPLOYEE"))
                                  .map(emp -> new AbstractMap.SimpleEntry<Company,Employee>(obj,emp)))
               .forEach(entry -> orderFurniture (entry.getKey(),entry.getValue()));

关于java - 从 Java 7 迁移到 Java 8,迭代时间长的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48768165/

相关文章:

Java 8 List<V> 到 Map<K, V>

java - 什么通过函数调用返回 CallableStatment.executeQuery()?

java - 在Java中,如果没有传递参数,如何为变量number=Integer.parseInt(args[0])赋值?

java - 由于 AsyncTask 是一个单独的类,我如何才能将 OnPostExecute() 的结果传递给主要 Activity ?

java - 如何根据元素之和对包含整数列表的列表进行排序

java - executor.invokeAll() 未完成执行

Java 8 API 流。需要解决重复 key 问题

java - 是否可以使用流将字符串分组并在有序的 Java 列表中对组成员进行计数?

java - Android 注释在库项目中不起作用

java - 在java中绘制帕累托前沿解