Approach 1 — Using groupingBy and counting
List<String> items = List.of("a", "b", "a", "c", "b", "a");
Map<String, Long> freq = items.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(freq);
Approach 2 — Using toMap with a Merge Function
Map<String, Integer> freq2 = items.stream()
.collect(Collectors.toMap(Function.identity(), v -> 1, Integer::sum));
System.out.println(freq2);
Explanation:
groupingBy + countingis idiomatic and concise for frequency maps.toMapwith a merge function is more flexible and allows custom accumulation logic.
