您可以使用 Collectors.frecuency() 和 Collectors.groupingBy。
我就是这样做的,希望对你有帮助。
Map<Object,Long> finalValues = new HashMap<Object, Long>();
finalValues = Arrays.asList(new Integer[] {3, 3, 3, 1, 5, 8, 11, 4, 5 })
.stream()
.collect(Collectors.groupingBy(e -> e, Collectors.counting()));
//Check the output
finalValues.entrySet().forEach(entry -> {
System.out.println("number: " + entry.getKey() + "| Times: "+ entry.getValue());
});
输出是:
number: 1| Times: 1
number: 3| Times: 3
number: 4| Times: 1
number: 5| Times: 2
number: 8| Times: 1
number: 11| Times: 1
你甚至可以使用频率来删除所有不重复的数字:
Map finalValues = new HashMap();
List<Integer> numbers = Arrays.asList(new Integer[]{1,2,1,3,4,4});
finalValues = numbers
.stream()
.filter(x-> Collections.frequency(numbers, x) > 1)
.collect(Collectors.groupingBy(e -> e, Collectors.counting()));
//Check the output
finalValues.entrySet().forEach(entry -> {
System.out.println("number: " + entry.getKey() + "| Times: "+ entry.getValue());
});
输出是:
number: 1| Times: 2
number: 4| Times: 2