Java 8 での複数のフィールドによるオブジェクトのグループ化
Java 8 の Collectors.groupingBy() メソッドは、オブジェクト ベースで整理するための強力なツールです単一のフィールド上で。ただし、複数のフィールドでオブジェクトを同時にグループ化する必要があるシナリオもあります。
複数のフィールドでグループ化するには、いくつかのオプションがあります。
コレクターのチェーン
複数のコレクターをチェーンして、異なるフィールドごとに順番にグループ化できます。たとえば、名前でグループ化し、次に年齢でグループ化するには、次のコードを使用できます。
Map<String, Map<Integer, List<Person>>> map = people .collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge)));
グループ レコードの定義
あるいは、グループ化基準を表すクラス。たとえば、名前と年齢のフィールドをカプセル化する NameAge レコードを作成できます。
class Person { record NameAge(String name, int age) { } public NameAge getNameAge() { return new NameAge(name, age); } }
その後、次のように NameAge レコードでグループ化できます。
Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
使用クラスのペア
独自のグループ レコードを実装したくない場合は、次を利用できます。 Apache Commons Par などの Java フレームワークによって提供されるペア クラス。ペアを使用して名前と年齢でグループ化するには:
Map<Pair<String, Integer>, List<Person>> map = people.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));
結論
コレクターのチェーン化、グループ レコードの定義、ペア クラスの利用はすべて、オブジェクトをグループ化するための実行可能な方法です。 Java 8 には複数のフィールドがあります。選択は特定のニーズと好みによって異なります。
以上がJava 8 で Collectors.groupingBy() を使用して複数のフィールドでオブジェクトをグループ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。