在Java8中使用streams拆分入口集和过滤器
我对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 -
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()));