我正在努力学习使用流和收集器,我知道如何使用多个for循环,但我想成为一个更高效的程序员。
每个项目都有一个MapCommittedHoursPerday,其中键是employee,值是用整数表示的小时数。我想遍历所有项目的committedhoursperdayMap,过滤committedhoursperday大于7(fulltime)的Map,并将每个全职工作的员工添加到集合中。
到目前为止,我编写的代码是:
public Set<Employee> getFulltimeEmployees() {
// TODO
Map<Employee,Integer> fulltimeEmployees = projects.stream().filter(p -> p.getCommittedHoursPerDay().entrySet()
.stream()
.filter(map -> map.getValue() >= 8)
.collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue())));
return fulltimeEmployees.keySet();
}
但是,过滤器识别Map,因为我可以访问键和值,但是在.collect(collectors.tomap())中,它不识别Map,只将其视为lambda参数
1条答案
按热度按时间kxeu7u2r1#
这里有一对多的概念。首先可以使用
flatMap
然后申请filter
到Map条目。这个
flatMap
步骤返回一个Stream<Map.Entry<Employee, Integer>>
. 这个filter
因此在一个Map.Entry<Employee, Integer>
.也可以在collect步骤上使用方法引用
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))