我正在尝试使用 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
来获取所有通过这两个参数的 Employee
的 Stream
过滤器,然后使用 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
调用该方法。
好的,如果您需要将实际对象传递给方法调用,则必须存储相关Employee
的Company
:
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/