ホームページ > Java > &#&チュートリアル > Java 8 で Collectors.groupingBy() を使用して複数のフィールドでオブジェクトをグループ化する方法

Java 8 で Collectors.groupingBy() を使用して複数のフィールドでオブジェクトをグループ化する方法

Mary-Kate Olsen
リリース: 2024-11-28 07:39:11
オリジナル
816 人が閲覧しました

How to Group Objects by Multiple Fields in Java 8 Using Collectors.groupingBy()?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート