ホームページ >Java >&#&チュートリアル >Java 8 ストリームを使用して複数のフィールドでオブジェクトをグループ化するにはどうすればよいですか?

Java 8 ストリームを使用して複数のフィールドでオブジェクトをグループ化するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-04 00:11:10785ブラウズ

How Can I Group Objects by Multiple Fields Using Java 8 Streams?

Java 8 での複数のフィールドによるグループ化

複数のフィールド名によるオブジェクトのグループ化は、Java プログラミングでは一般的な操作であり、簡単に実行できます。これは、Java 8 の Stream API と Collectors.groupingBy() メソッドを使用して実現されます。

提供されるコード質問では、単一のフィールド名でオブジェクトをグループ化する方法を示しています:

Map<Integer, List<Person>> peopleByAge = people
    .collect(Collectors.groupingBy(p -> p.age,
        Collectors.mapping((Person p) -> p, toList())));

複数のフィールドでオブジェクトをグループ化するには、最初のオプションは複数のコレクターをチェーンすることです:

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); }
}
...
Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));

最後に、それが可能になります。 Apache Commons Pair などのサードパーティ ライブラリを使用して、グループ化用のペア オブジェクトを作成します。

Map<Pair<String, Integer>, List<Person>> map =
    people.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));

これらのグループ化手法を活用することで、Java 8 で複数のフィールド名によってオブジェクトを効率的にグループ化することができます。特定の基準に基づいてデータを整理し、アクセスするための便利な方法です。

以上がJava 8 ストリームを使用して複数のフィールドでオブジェクトをグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。