How can I count occurrences with groupBy? How can I count occurrences with groupBy? java java

How can I count occurrences with groupBy?


I think you're just looking for the overload which takes another Collector to specify what to do with each group... and then Collectors.counting() to do the 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);    }}

Result:

{Hello=2, World=1}

(There's also the possibility of using groupingByConcurrent for more efficiency. Something to bear in mind for your real code, if it would be safe in your context.)


Here is example for list of Objects

Map<String, Long> requirementCountMap = requirements.stream().collect(Collectors.groupingBy(Requirement::getRequirementType, Collectors.counting()));


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()));