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

如何在 Java 8 中将 EntrySet 拆分为带有流的映射

如何在 Java 8 中将 EntrySet 拆分为带有流的映射

梦里花落0921 2023-06-04 11:06:24
我有一个Map<LocalDateTime, Set<Vote>> map = new HashMap<>();我必须计算票数并将其放入按 localDateTime 分组的新地图中。我不知道如何用流来做到这一点。我的返回值必须是Map<LocalDateTime, Integer>.如何在 Java 8 中使用流来做到这一点?
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

由于您已经有一个Map<LocalDateTime,Set<Vote>>,因此Vote实例已按 分组LocalDateTime。您需要做的就是对每个投票值求和Set<Vote>

Map<LocalDateTime, Integer> voteSums = 
    map.entrySet()
       .stream()
       .collect(Collectors.toMap(Map.Entry::getKey,
                                 e -> e.getValue()
                                       .stream()
                                       .mapToInt(Vote::getVoteValue)
                                       .sum()));

您应该在其中替换为返回您希望求和的值的类方法getVoteValue的实际名称。Vote

或者,如果您只想知道Vote每个键有多少个实例,您可以这样写:

Map<LocalDateTime, Integer> voteCounts = 
    map.entrySet()
       .stream()
       .collect(Collectors.toMap(Map.Entry::getKey,
                                 e -> e.getValue().size()));


查看完整回答
反对 回复 2023-06-04
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

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