IUn*_*own 4 java lambda java-8 java-stream
我们有一张地图学生{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));
});
Run Code Online (Sandbox Code Playgroud)
最终输出将是一张城市地图,以计算“当前”学生的人数。
有没有更有效的方法来实现这一目标?
你可以这样做
Map<String, Long> studentPerCity = students.values().stream().filter(StudentData::isCurrent)
.collect(Collectors.groupingBy(StudentData::getCity, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)