首页 > 解决方案 > 使用流在 java 8 中拆分 entrySet 和过滤器

问题描述

我对流有疑问

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

我必须计算票数并将其放入按 localDateTime 分组的新地图中,但我只需要计算按类型过滤的票数。我不知道如何使用流来做到这一点。

我已经尝试过了,但它不起作用,甚至无法编译

public Map<LocalDateTime, Integer> numbersOfVotes(TypeVote typeVote) {
    return map.entrySet().stream().filter(en -> en.getValue().stream().filter(v -> v.getTypeVote().equals(typeVote)))
            .collect(Collectors.toMap(Entry::getKey, e -> e.getValue().size()));
}

类 vote 有 2 个属性,name 和 TypeVote(枚举)

public Map<LocalDateTime, Integer> numbersOfVotes(TypeVote typeVote) {
    return null;
}

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

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

标签: javajava-8java-stream

解决方案


final Map<LocalDateTime, Integer> result = map.entrySet().stream()
        .collect(Collectors.toMap(Map.Entry::getKey, 
                (Map.Entry<LocalDateTime, Set<Vote>> entry) -> (int) entry.getValue().stream()
                        .filter((Vote vote) -> true) // Here insert real filtering
                        .count()));

推荐阅读