1対多によるJava 8のグループ化

ミカエル・グレブ:

ストリームでJava 8構文を使用する方法を学びたいと思います。

すべての値に1つのキーがある場合、groupingByを使用するのは簡単です。しかし、すべての値のキーのリストがあり、それでもそれらをgroupingByで分類したい場合はどうなりますか?それをいくつかのステートメントに分割する必要がありますか、それともおそらくそれをより簡単にするために実行できる小さなストリームマジックがありますか?

これは基本的なコードです:

List<Album> albums = new ArrayList<>();
Map<Artist, List<Album>> map = albums.stream().collect(Collectors.groupingBy(this::getArtist));

すべてのアルバムにアーティストが1人しかいない場合は、うまく機能します。ただし、アルバムには多数のアーティストが含まれる可能性があるため、リストを返す必要があります。アルバムとアーティストはもちろんイラストを使用していますが、私には実世界のタイプがあります。

おそらく簡単な解決策がありますが、しばらくの間それを見つけられなかったので、このサイトが表す集合的な脳にそれを解決するように呼びかけています。:)単純なソリューションが存在しない場合に備えて、複雑なソリューションも歓迎します。

Albumクラス、またはAlbumを引数として取るユーティリティメソッドとして:

Artist getArtist(); // ok

List<Artist> getArtist(); // Not ok, since we now have many "keys" for every Album

乾杯、ミカエル・カウント

benjiweber:

groupingByの2番目の引数として渡すことができるCollectors.mappingの後であると思います

完全な例

import java.util.AbstractMap;
import java.util.List;
import java.util.Map;

import static java.util.Arrays.asList;
import static java.util.Map.Entry;
import static java.util.stream.Collectors.*;

public class SO {

    public static void main(String... args) {

        List<Album> albums = asList(
                new Album(
                        asList(
                                new Artist("bob"),
                                new Artist("tom")
                        )
                ),
                new Album(asList(new Artist("bill")))
        );

        Map<Artist, List<Album>> x = albums.stream()
                .flatMap(album -> album.getArtist().stream().map(artist -> pair(artist, album)))
                .collect(groupingBy(Entry::getKey, mapping(Entry::getValue, toList())));

        x.entrySet().stream().forEach(System.out::println);
    }

    static class Artist {
        private final String name;

        Artist(String name) {
            this.name = name;
        }

        public String toString() {return name;}

    }

    static class Album {
        private List<Artist> artist;

        Album(List<Artist> artist) {
            this.artist = artist;
        }

        List<Artist> getArtist() {
            return artist;
        }

    }

    private static <T,U> AbstractMap.SimpleEntry<T,U> pair(T t, U u) {
        return new AbstractMap.SimpleEntry<T,U>(t,u);
    }


}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

によってグループ化Javaの8ストリームの複数

分類Dev

Javaの8マルチレベルのグループ化と還元

分類Dev

Javaの8グループによると、セットに追加

分類Dev

どのようにグループ化し、Java8に削減へ

分類Dev

Java8でグループ化の複雑さ

分類Dev

Java 8とBigDecimalによるグループ化

分類Dev

複数レベルのグループ化を持つJava 8のGroup By

分類Dev

セパレーターが異なる最初のString属性によるJava 8のグループ化

分類Dev

Java 8ストリームのグループ化

分類Dev

Java 8でのマップのリストによるグループ化

分類Dev

java springbootでの多対多および1対多マッピング

分類Dev

Java 8によるグループ化、カウント、カスタムオブジェクトへの変換

分類Dev

1対多の関係によるCrudRepositoryフィルター

分類Dev

StringによるJava 8グループ

分類Dev

Java 8によるグループ化の逆

分類Dev

DynamoDBで1対1、1対多、および多対多の関係をモデル化する方法

分類Dev

複数のフィールドによるJava8ラムダのグループ化

分類Dev

複数のフィールドによるJava8ラムダのグループ化

分類Dev

Java 8ストリーミング:集約によるグループ化

分類Dev

オブジェクトのグループ化java8

分類Dev

オプションの属性によるJava8ストリームのグループ化

分類Dev

Java8のネストされたグループ化

分類Dev

Java8でのグループ化の逆

分類Dev

複数のフィールドを返すJava8のグループ化

分類Dev

TypeORM:1対多および多対1の関係があるときに参加する

分類Dev

複数のキーを使用したJava8のグループ化

分類Dev

多対多のテーブルでグループ化

分類Dev

多対多によるEFコアライングループ

分類Dev

KerasLSTMによる多対多の分類

Related 関連記事

  1. 1

    によってグループ化Javaの8ストリームの複数

  2. 2

    Javaの8マルチレベルのグループ化と還元

  3. 3

    Javaの8グループによると、セットに追加

  4. 4

    どのようにグループ化し、Java8に削減へ

  5. 5

    Java8でグループ化の複雑さ

  6. 6

    Java 8とBigDecimalによるグループ化

  7. 7

    複数レベルのグループ化を持つJava 8のGroup By

  8. 8

    セパレーターが異なる最初のString属性によるJava 8のグループ化

  9. 9

    Java 8ストリームのグループ化

  10. 10

    Java 8でのマップのリストによるグループ化

  11. 11

    java springbootでの多対多および1対多マッピング

  12. 12

    Java 8によるグループ化、カウント、カスタムオブジェクトへの変換

  13. 13

    1対多の関係によるCrudRepositoryフィルター

  14. 14

    StringによるJava 8グループ

  15. 15

    Java 8によるグループ化の逆

  16. 16

    DynamoDBで1対1、1対多、および多対多の関係をモデル化する方法

  17. 17

    複数のフィールドによるJava8ラムダのグループ化

  18. 18

    複数のフィールドによるJava8ラムダのグループ化

  19. 19

    Java 8ストリーミング:集約によるグループ化

  20. 20

    オブジェクトのグループ化java8

  21. 21

    オプションの属性によるJava8ストリームのグループ化

  22. 22

    Java8のネストされたグループ化

  23. 23

    Java8でのグループ化の逆

  24. 24

    複数のフィールドを返すJava8のグループ化

  25. 25

    TypeORM:1対多および多対1の関係があるときに参加する

  26. 26

    複数のキーを使用したJava8のグループ化

  27. 27

    多対多のテーブルでグループ化

  28. 28

    多対多によるEFコアライングループ

  29. 29

    KerasLSTMによる多対多の分類

ホットタグ

アーカイブ