Вы можете использовать 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