3 回答
TA贡献1795条经验 获得超7个赞
我认为您只是在寻找过载,它需要另一个负载Collector来指定对每个组的处理方式...然后Collectors.counting()进行计数:
import java.util.*;
import java.util.stream.*;
class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, Long> counted = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(counted);
}
}
结果:
{Hello=2, World=1}
(也有可能使用groupingByConcurrent来提高效率。如果在您的上下文中安全的话,请记住您的真实代码。)
TA贡献1848条经验 获得超2个赞
这是完成手头任务的略有不同的选择。
使用toMap:
list.stream()
.collect(Collectors.toMap(Function.identity(), e -> 1, Math::addExact));
使用Map::merge:
Map<String, Integer> accumulator = new HashMap<>();
list.forEach(s -> accumulator.merge(s, 1, Math::addExact));
添加回答
举报