在Java8中使用streams拆分入口集和过滤器

在Java8中使用streams拆分入口集和过滤器,java,java-8,java-stream,Java,Java 8,Java Stream,我对streams有意见 我有一个Map Map=newhashmap() 我必须计算投票数并将其放入按localDateTime分组的新映射中,但我只需要计算按类型过滤的投票数。我不知道如何使用流来实现这一点 我已经试过了,但它不起作用,甚至无法编译 public Map<LocalDateTime, Integer> numbersOfVotes(TypeVote typeVote) { return map.entrySet().stream().filter(en -

我对streams有意见

我有一个
Map Map=newhashmap()

我必须计算投票数并将其放入按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()));
}
公共地图投票数(类型投票类型投票){
返回map.entrySet().stream().filter(en->en.getValue().stream().filter(v->v.getTypeVote().equals(typeVote)))
.collect(Collectors.toMap(条目::getKey,e->e.getValue().size());
}
类投票有两个属性,名称和类型投票(枚举)

公共地图投票数(类型投票类型投票){
返回null;
}
我的返回值必须是
Map

如何在Java8中使用流来实现这一点?

类似于

Function<Map.Entry<LocalDateTime, Set<Vote>>, Integer> fun =  e -> (int) e.getValue()
            .stream().filter(vote -> typeVote.equals(vote.getTypeVote()))
            .count();

Map<LocalDateTime, Integer> collect = map.entrySet().stream()
            .collect(Collectors.toMap(Map.Entry::getKey, fun));
函数fun=e->(int)e.getValue()
.stream().filter(投票->类型投票.equals(投票.getTypeVote()))
.count();
Map collect=Map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,fun));
最终映射结果=Map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey、,
(Map.Entry)->(int)Entry.getValue().stream()
.filter((投票)->true)//此处插入实数筛选
.count());

如何进行筛选?您已经尝试了什么?公共映射投票数(TypeVote TypeVote){return Map.entrySet().stream().filter(en->en.getValue().stream().filter(v->v.getTypeVote().equals(TypeVote)).collector(collector.toMap(Entry::getKey,e->e.getValue().size());}避免Collectors.toMap()的第二个参数的类型以提高可读性不是更好吗?取决于-对于IntelliJ,我主要避免它,但是对于NetBeans和Eclipse,我主要添加它,因为一些旧版本的IDE不能像IntelliJ那样显示该类型。
Function<Map.Entry<LocalDateTime, Set<Vote>>, Integer> fun =  e -> (int) e.getValue()
            .stream().filter(vote -> typeVote.equals(vote.getTypeVote()))
            .count();

Map<LocalDateTime, Integer> collect = map.entrySet().stream()
            .collect(Collectors.toMap(Map.Entry::getKey, fun));
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()));