为了账号安全,请及时绑定邮箱和手机立即绑定

在地图中提取值

在地图中提取值

青春有我 2023-04-13 15:05:12
我们有一张地图 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()));



查看完整回答
反对 回复 2023-04-13
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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

students.values().stream()
                .filter(StudenData::isCurrent)
                .map(StudenData::getCity)
                .forEach(city -> studentpercity(city, studentpercity.getOrDefault(city, 0) + 1));

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


查看完整回答
反对 回复 2023-04-13
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信