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

Java 8 で「Collectors.groupingBy()」を使用して複数のフィールドでグループ化する方法

Susan Sarandon
リリース: 2024-11-24 16:28:12
オリジナル
975 人が閲覧しました

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

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 バージョンでのレコードの可用性 >= 16グループ化クラスの作成が簡素化され、明確さと保守性の点で好ましい選択肢となります。

以上がJava 8 で「Collectors.groupingBy()」を使用して複数のフィールドでグループ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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