yucatio@システムエンジニア

趣味で作ったものいろいろ

Javaでリストの重複をカウントする(ストリームAPI使用)

Javaでリストの重複をカウントする方法です。ストリームAPIを使用すると簡単に書けます。

重複をカウントする

List<String> list = List.of("A", "B", "C", "B", "B", "D", "A");

Map<String, Long> countMap = list.stream().collect(
    Collectors.groupingBy(
        Function.identity(),
        Collectors.counting()));

countMap.forEach((k, v) -> System.out.println(k + ":" + v));
// A:2
// B:3
// C:1
// D:1

重複が多い順に並び変える

さらに、重複数が多い順に並び変えます

List<String> list = List.of("A", "B", "C", "B", "B", "D", "A");

Map<String, Long> countMap = list.stream().collect(
    Collectors.groupingBy(
        Function.identity(),
        Collectors.counting()));

List<Map.Entry<String, Long>> sortedCountList = countMap.entrySet().stream()
    .sorted(Map.Entry.<String, Long> comparingByValue().reversed())
    .collect(Collectors.toList());

sortedCountList.forEach(e -> System.out.println(e.getValue() + ":" + e.getKey()));
// 3:B
// 2:A
// 1:C
// 1:D