我们有一个地图学生{ studentId : StudentData }。
StudentData是一个具有学生属性的POJO。
其要求是获得所有具有属性isCurrent==true的学生。
如果是,则提取学生的城市属性。
这将用于增加学生城市地图{ city : count }的计数。
Students.entrySet()
.stream()
.filter(x -> true == x.getValue().isCurrent())
.forEach(x -> {
studentpercity(x.getValue().getCity(), (studentpercity.getOrDefault(x.getValue().getCity(), 0) + 1));
});最后的输出将是一张城市地图来统计“当前”的学生。
是否有更有效的方法来实现这一点?
发布于 2019-07-23 07:29:40
你可以这样做,
Map<String, Long> studentPerCity = students.values().stream().filter(StudentData::isCurrent)
.collect(Collectors.groupingBy(StudentData::getCity, Collectors.counting()));发布于 2019-07-23 07:40:45
另一种选择可能是这样的:
students.values().stream()
.filter(StudenData::isCurrent)
.map(StudenData::getCity)
.forEach(city -> studentpercity(city, studentpercity.getOrDefault(city, 0) + 1));但是,关于您对“迭代”的评论。在单个流中(如您的示例),每个元素只迭代一次。这意味着流中的每个操作都将在每个元素上应用一次,并且只有在之前没有过滤掉的情况下才会应用。
https://stackoverflow.com/questions/57158610
复制相似问题