我想将流中的项收集到一个映射中,该映射将相等的对象分组在一起,并映射到出现的次数。
List<String> list = Arrays.asList("Hello", "Hello", "World");
Map<String, Long> wordToFrequency = // what goes here?
因此,在本例中,我希望map由以下条目组成:
Hello -> 2
World -> 1
我该怎么做呢?
发布于 2014-08-22 14:55:51
我认为您只是在寻找overload,它需要另一个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
来提高效率。对于您的真实代码,如果它在您的上下文中是安全的,请牢记这一点。)
发布于 2018-06-30 00:45:49
以下是对象列表示例
Map<String, Long> requirementCountMap = requirements.stream().collect(Collectors.groupingBy(Requirement::getRequirementType, Collectors.counting()));
发布于 2016-11-14 22:49:20
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("Hello");
list.add("World");
Map<String, List<String>> collect = list.stream()
.collect(Collectors.groupingBy(o -> o));
collect.entrySet()
.forEach(e -> System.out.println(e.getKey() + " - " + e.getValue().size()));
https://stackoverflow.com/questions/25441088
复制相似问题