Вот один из способов:
new Random().ints(100, 0, 200) // 100 is streamSize , 0 is randomNumberOrigin, 200 is randomNumberBound
.boxed()
.collect(groupingBy(Function.identity(), counting()))
.forEach((k, v) -> System.out.println("Values " + k + " count" + v));
или, если вы хотите получить результат в списке:
List<String> result = new Random().ints(100, 0, 200) // 100 is streamSize , 0 is randomNumberOrigin, 200 is randomNumberBound
.boxed()
.collect(groupingBy(Function.identity(), counting()))
.entrySet().stream()
.map(e -> "Values " + e.getKey() + " count" + e.getValue())
.collect(Collectors.toList());
Другой подход был бы с toMap
:
List<String> res = new Random().ints(100, 0, 200) // 100 is streamSize , 0 is randomNumberOrigin, 200 is randomNumberBound
.boxed()
.collect(toMap(Function.identity(), e -> 1, Math::addExact))
.entrySet().stream()
.map(e -> "Values " + e.getKey() + " count" + e.getValue())
.collect(Collectors.toList());
Редактировать:
, если вы удалили тег Java 8, вот решение для полноты:
List<Integer> al = new ArrayList<>();
Set<Integer> accumulator = new HashSet<>();
Random r = new Random();
for (int i = 0; i < 100; i++) {
int result = r.nextInt(200);
al.add(result);
accumulator.add(result);
}
for (Integer i : accumulator) {
System.out.println("Values " + i + " : count=" + Collections.frequency(al, i));
}
+ 1 к @Хюля за предложение Collections.frequency
сначала.