首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在地图中提取值

在地图中提取值
EN

Stack Overflow用户
提问于 2019-07-23 07:14:02
回答 2查看 94关注 0票数 3

我们有一个地图学生{ studentId : StudentData }。

StudentData是一个具有学生属性的POJO。

其要求是获得所有具有属性isCurrent==true的学生。

如果是,则提取学生的城市属性。

这将用于增加学生城市地图{ city : count }的计数。

代码语言:javascript
复制
Students.entrySet()
                .stream()
                .filter(x -> true == x.getValue().isCurrent())
                .forEach(x -> {
                      studentpercity(x.getValue().getCity(), (studentpercity.getOrDefault(x.getValue().getCity(), 0) + 1));
                      });

最后的输出将是一张城市地图来统计“当前”的学生。

是否有更有效的方法来实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-23 07:29:40

你可以这样做,

代码语言:javascript
复制
Map<String, Long> studentPerCity = students.values().stream().filter(StudentData::isCurrent)
        .collect(Collectors.groupingBy(StudentData::getCity, Collectors.counting()));
票数 4
EN

Stack Overflow用户

发布于 2019-07-23 07:40:45

另一种选择可能是这样的:

代码语言:javascript
复制
students.values().stream()
                .filter(StudenData::isCurrent)
                .map(StudenData::getCity)
                .forEach(city -> studentpercity(city, studentpercity.getOrDefault(city, 0) + 1));

但是,关于您对“迭代”的评论。在单个流中(如您的示例),每个元素只迭代一次。这意味着流中的每个操作都将在每个元素上应用一次,并且只有在之前没有过滤掉的情况下才会应用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57158610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档