java - 如何在 Java 8 中使用流将 EntrySet 拆分为映射

标签 java hashmap

我有一个Map<LocalDateTime, Set<Vote>> map = new HashMap<>();

我必须计算票数并将其放入按 localDateTime 分组的新 map 中。我不知道如何用流来做到这一点。

我的返回值必须是Map<LocalDateTime, Integer> .

如何在 Java 8 中使用流来做到这一点?

谢谢

最佳答案

因为您已经有 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()));

关于java - 如何在 Java 8 中使用流将 EntrySet 拆分为映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475834/

相关文章:

java - 意外的 toString 结果

java - 如何让 Android TableLayout 填满屏幕?

java - 两个 HashMap 的一般合并

java - Java中的HashMap和Map对象有什么区别?

java - 在 Java 中从行集创建树的最佳方法

java - 如果我们记录一个对象的不可变性,我们能否将其视为不可变的?

java - Cursor,CursorAdapter,LoaderManager,Loader之间的关系

java - Toggle 与 HashMap 相比,还能如何更好呢?

android - 使用 HashMap 填充 Spinner?

Java - HashMap 和 HashSet 不受 Object.hashCode() 支持?