列出不同元素,包括Java流的计数

时间:2018-08-15 16:00:14

标签: java count java-stream distinct

我想知道是否有可能使用单个Java Steam语句来打印出集合中的唯一元素并包括每个元素的计数。

例如,如果我有:

List<String> animals = Arrays.asList("dog", "cat", "pony", "pony", "pony", "dog");

我想打印流:

cat - 1
dog - 2
pony - 3

2 个答案:

答案 0 :(得分:4)

您可以这样做

Map<String, Long> result = animals.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

使用Collectors.groupingBy将具有相同键的元素分组。然后为每个组应用counting下游收集器以获取计数。

答案 1 :(得分:3)

您可以组合分组和计数收集器:

Map<String, Long> countMap = Arrays.asList("dog", "cat", "pony", "pony", "pony", "dog")
    .stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))

这将导致此地图:

{cat=1, dog=2, pony=3}