提取地图中的值

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)

最终输出将是一张城市地图,以计算“当前”学生的人数。
有没有更有效的方法来实现这一目标?

Rav*_*ala 5

你可以这样做

Map<String, Long> studentPerCity = students.values().stream().filter(StudentData::isCurrent)
        .collect(Collectors.groupingBy(StudentData::getCity, Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)