Java Streamを使用して要素をグループ化し、カウントする方法


  1. リストの要素をグループ化してカウントする方法:

    import java.util.*;
    import java.util.stream.Collectors;
    public class Main {
       public static void main(String[] args) {
           List<String> list = Arrays.asList("apple", "banana", "apple", "orange", "banana", "apple");
           Map<String, Long> counts = list.stream()
                   .collect(Collectors.groupingBy(e -> e, Collectors.counting()));
           System.out.println(counts);
       }
    }

    出力:

    {orange=1, banana=2, apple=3}

    上記のコードでは、groupingByメソッドを使用して要素をグループ化し、countingコレクターを使用して各グループの要素数をカウントしています。

  2. オブジェクトのプロパティを基準にグループ化してカウントする方法:

    import java.util.*;
    import java.util.stream.Collectors;
    public class Main {
       public static void main(String[] args) {
           List<Person> people = Arrays.asList(
                   new Person("John", 25),
                   new Person("Jane", 30),
                   new Person("John", 35),
                   new Person("Jane", 28),
                   new Person("John", 25)
           );
           Map<String, Long> counts = people.stream()
                   .collect(Collectors.groupingBy(Person::getName, Collectors.counting()));
           System.out.println(counts);
       }
    }
    class Person {
       private String name;
       private int age;
       public Person(String name, int age) {
           this.name = name;
           this.age = age;
       }
       public String getName() {
           return name;
       }
       public int getAge() {
           return age;
       }
    }

    出力:

    {Jane=2, John=3}

    上記のコードでは、getNameメソッドを使用してPersonオブジェクトをグループ化し、各グループの要素数をカウントしています。

これらのコード例を参考にして、JavaのStreamを使用して要素をグループ化し、カウントする方法を実装することができます。