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

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

Patricia Arquette
リリース: 2024-12-04 00:11:10
オリジナル
636 人が閲覧しました

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

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