Java 8 での複数のフィールドによるグループ化
Java 8 では、Collectors.groupingBy() メソッドは、一般的に、以下に基づいてオブジェクトをグループ化するために使用されます。特定のフィールド。ただし、同じ POJO の複数のフィールドでグループ化する必要がある場合はどうすればよいでしょうか?
使用可能なオプションがいくつかあります:
コレクターのチェーン
Map<String, Map<Integer, List<Person>>> map = people .collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge));
このコードは、人物オブジェクトを最初に名前で、次に年齢でグループ化し、その結果、ネストされたマップが生成されます。
グループ化クラスの定義
class Person { record NameAge(String name, int age) { } public NameAge getNameAge() { return new NameAge(name, age); } } Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
グループ化基準 (NameAge など) をカプセル化するレコードまたはクラスを作成すると、グループ化することができます。
ペアの使用クラス
import org.apache.commons.lang3.tuple.Pair; Map<Pair<String, Integer>, List<Person>> map = people .collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));
サードパーティのライブラリを使用している場合は、そのペア クラスを利用してグループ化基準を表すことができます。
最適なオプションの選択
アプローチの選択は、具体的な要件によって異なります。プロジェクト:
以上がJava 8 で「Collectors.groupingBy()」を使用して複数のフィールドでグループ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。