目前我的代码有这么长。我知道可以把它缩短很多,但似乎无法解决。
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);