如何使流比当前流更简单



目前我的代码有这么长。我知道可以把它缩短很多,但似乎无法解决。

Employee[] fullTimeEmployees = employees.stream().filter((Employee e) -> {
for (Project project : e.getAssignedProjects()) {
int hoursWorked = project.getCommittedHoursPerDay().get(e);
if (hoursWorked >= 8)
return true ;
}
return false ;
}).toArray(Employee[] :: new);


System.out.println(Arrays.toString(fullTimeEmployees));

我试过使用平面图,但没有成功。

我的平板地图代码是:

List<Project> test = employees.stream().flatMap(employee -> employee.getAssignedProjects().stream()
.filter(project -> project.getCommittedHoursPerDay().get(employee) >= 8))
.collect(Collectors.toList());

非常感谢您的帮助!

编辑:

这是我试图制作的for循环:

for (Employee employee : employees) {
for (Project project : employee.getAssignedProjects()) {
int hoursWorked = project.getCommittedHoursPerDay().get(employee);
if (hoursWorked >= 8)
if (!fullTimeEmployees.contains(employee))
fullTimeEmployees.add(employee);
}
}

下面的过滤器更简单。不需要使用flatMap。只需在Employee的指定项目的Stream上使用anyMatch

Employee[] fullTimeEmployees = 
employees.stream()
.filter(e -> e.getAssignedProjects()
.stream()
.anyMatch(p -> p.getCommittedHoursPerDay().get(e) >= 8))
.toArray(Employee[] :: new);

最新更新