我们有一张地图 Students { studentId : StudentData }。StudentData 是一个具有学生属性的 POJO。要求是让所有学生都具有 attribute isCurrent==true。如果是,则提取学生的城市属性。这将用于增加 studentpercity 地图的计数{ city : count }Students.entrySet()
.stream()
.filter(x -> true == x.getValue().isCurrent())
.forEach(x -> {
studentpercity(x.getValue().getCity(), (studentpercity.getOrDefault(x.getValue().getCity(), 0) + 1));
});最终输出将是一张城市地图,以计算“当前”学生的数量。有没有更有效的方法来实现这一目标?
2 回答
宝慕林4294392
TA贡献2021条经验 获得超8个赞
你可以这样做,
Map<String, Long> studentPerCity = students.values().stream().filter(StudentData::isCurrent) .collect(Collectors.groupingBy(StudentData::getCity, Collectors.counting()));
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
另一种选择可能是这样的:
students.values().stream() .filter(StudenData::isCurrent) .map(StudenData::getCity) .forEach(city -> studentpercity(city, studentpercity.getOrDefault(city, 0) + 1));
但是,关于您对“迭代”的评论。在单个流中(如您的示例),每个元素仅迭代一次。这意味着流中的每个操作都将在每个元素上应用一次,并且只有在之前没有被过滤掉的情况下才会应用。
添加回答
举报
0/150
提交
取消