我需要计算一些特殊包裹的出现次数。
Map<Integer,Integer> countBundles(){
return bundles.stream()
.bla()
.bla()
.bla()
.collect(groupingBy(Bundle::getId), counting()));
}
此代码不编译,因为counting返回long。有什么漂亮的方法返回map<integer,integer>吗?
我有这个主意,但很难看
map.entrySet().stream()
.collect(toMap(Map.Entry::getKey, entry -> (int) entry.getValue().longValue()));
2条答案
按热度按时间1tuwyuhd1#
没有内置方式可供使用
Collectors.counting()
与Integer
,因为泛型是不变的。但是,您可以编写一个自定义Collector
以最小的努力:你也可以用平原
summingInt(e -> 1)
如果您只想使用本机库。例子:
请注意,有签名的解释,你最多可以数
2.147.483.647
元素。hec6srdp2#
你可以用
Collectors.collectingAndThen
要将函数应用于收集器的结果,请执行以下操作:如果您需要一些其他语义而不仅仅是一个cast,请替换
Long::intValue
还有其他的转换码。