Java Streams APIを使用してマップのリストをリスト値とマージする方法は?

tafit3

Map<X, List<String>>Xpによるグループ化を減らし、すべてのリスト値を同時に結合Map<Integer, List<String>>して、最後に含めるにはどうすればよいですか?

これは私がこれまでに試したことです:

class X {
    int p;
    int q;
    public X(int p, int q) { this.p = p; this.q = q; }
}
Map<X, List<String>> x = new HashMap<>();
x.put(new X(123,5), Arrays.asList("A","B"));
x.put(new X(123,6), Arrays.asList("C","D"));
x.put(new X(124,7), Arrays.asList("E","F"));
Map<Integer, List<String>> z = x.entrySet().stream().collect(Collectors.groupingBy(
    entry -> entry.getKey().p, 
    mapping(Map.Entry::getValue, 
        reducing(new ArrayList<>(), (a, b) -> { a.addAll(b); return a; }))));
System.out.println("z="+z);

しかし、結果は次のようになります:z = {123 = [E、F、A、B、C、D]、124 = [E、F、A、B、C、D]}。

z = {123 = [A、B、C、D]、124 = [E、F]}にしたい

ホルガー

reducingコレクターを誤って使用しています。最初の引数は、削減操作のID値である必要がありますただし、値を追加して変更しているため、結果が完全に説明されます。すべての値が同じ値に追加ArrayListされ、不変のID値であることが期待されます。

あなたがしたいのは可変削減であり、それにCollectors.reducingは適切ではありません。次の方法を使用して、適切なコレクターを作成できますCollector.of(…)

Map<Integer, List<String>> z = x.entrySet().stream().collect(groupingBy(
    entry -> entry.getKey().p, Collector.of(
        ArrayList::new, (l,e)->l.addAll(e.getValue()), (a,b)->{a.addAll(b);return a;})));

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

条件とマップのデータを使用して、リストからオブジェクトを一致させるとJava 8 Streamsを使用して別のマップに保存する方法

分類Dev

java8 Streamsを使用してリスト内の内部リストをマージする

分類Dev

Streams Java 8を使用してカスタムオブジェクトのリストを単一のリストオブジェクトにマージする

分類Dev

Java Streamsを使用してネストされたマップからリストを抽出する

分類Dev

Java Streams:リストをマップのマップにグループ化

分類Dev

Java 8 Streamsを使用して、モデルのリストを内部マップを含むマップに変換する

分類Dev

Java 8 Streamsを使用したハッシュマップオブジェクトリストの反復

分類Dev

java-streamsを使用して複数のリストを1つのリストに収集する方法は?

分類Dev

Javaの8 Streamsを使用して、共通の条件に基づいて2つの異なるリストからマップを作成します。

分類Dev

ストリーム外の値を使用してJavaストリームAPIでマップを作成する方法

分類Dev

java-streamsを使用してリストからマップを作成するにはどうすればよいですか?

分類Dev

Java 8 Streams APIを使用して整数のリストをシャッフルする

分類Dev

Java 8 Streamsを使用してリストから必要なオブジェクトのみを取得する

分類Dev

Java Streams-リストの値に応じて値を作成します

分類Dev

値がJava 8ストリームとラムダを使用して要素のリストであるマップの値を反復して処理する方法

分類Dev

Javaのストリームを使用してマップに二つの配列をマージするには?

分類Dev

Javaの8内のNULLと空のチェックとフラットなマップを使用して複数のリストをマージするには?

分類Dev

Javaでキーとしてリストを使用してリストをマップに変換する方法

分類Dev

Java 8を使用してリスト内のマップ値を置き換える方法はありますか?

分類Dev

Javaのストリームを使用してマップ値を平らにする方法

分類Dev

Javaの8でStreamsを使用してループするための2つをマージする方法はありますか?

分類Dev

Javaでマップのリストをマージする方法は?

分類Dev

Java8ストリームAPIを使用してマップを別のマップに変換する

分類Dev

Javaの8ストリーミングAPIを使用したマップのリストからマップのマップを作成する方法

分類Dev

Java 8 StreamsとLambdasを使用して、親要素を参照するネストされたforループを繰り返す方法は?

分類Dev

子の値の子を取得し、Javaストリーム演算子を使用してマップとして収集する方法

分類Dev

java-値としてリストを使用してマップ内の単語を検索する

分類Dev

ラムダ(java.util.stream.Streams.zip)でJDK8を使用してストリームを圧縮する

分類Dev

Java <Streams>リストのコンポーネントの数に基づいて、オブジェクトのリストを並べ替える方法

Related 関連記事

  1. 1

    条件とマップのデータを使用して、リストからオブジェクトを一致させるとJava 8 Streamsを使用して別のマップに保存する方法

  2. 2

    java8 Streamsを使用してリスト内の内部リストをマージする

  3. 3

    Streams Java 8を使用してカスタムオブジェクトのリストを単一のリストオブジェクトにマージする

  4. 4

    Java Streamsを使用してネストされたマップからリストを抽出する

  5. 5

    Java Streams:リストをマップのマップにグループ化

  6. 6

    Java 8 Streamsを使用して、モデルのリストを内部マップを含むマップに変換する

  7. 7

    Java 8 Streamsを使用したハッシュマップオブジェクトリストの反復

  8. 8

    java-streamsを使用して複数のリストを1つのリストに収集する方法は?

  9. 9

    Javaの8 Streamsを使用して、共通の条件に基づいて2つの異なるリストからマップを作成します。

  10. 10

    ストリーム外の値を使用してJavaストリームAPIでマップを作成する方法

  11. 11

    java-streamsを使用してリストからマップを作成するにはどうすればよいですか?

  12. 12

    Java 8 Streams APIを使用して整数のリストをシャッフルする

  13. 13

    Java 8 Streamsを使用してリストから必要なオブジェクトのみを取得する

  14. 14

    Java Streams-リストの値に応じて値を作成します

  15. 15

    値がJava 8ストリームとラムダを使用して要素のリストであるマップの値を反復して処理する方法

  16. 16

    Javaのストリームを使用してマップに二つの配列をマージするには?

  17. 17

    Javaの8内のNULLと空のチェックとフラットなマップを使用して複数のリストをマージするには?

  18. 18

    Javaでキーとしてリストを使用してリストをマップに変換する方法

  19. 19

    Java 8を使用してリスト内のマップ値を置き換える方法はありますか?

  20. 20

    Javaのストリームを使用してマップ値を平らにする方法

  21. 21

    Javaの8でStreamsを使用してループするための2つをマージする方法はありますか?

  22. 22

    Javaでマップのリストをマージする方法は?

  23. 23

    Java8ストリームAPIを使用してマップを別のマップに変換する

  24. 24

    Javaの8ストリーミングAPIを使用したマップのリストからマップのマップを作成する方法

  25. 25

    Java 8 StreamsとLambdasを使用して、親要素を参照するネストされたforループを繰り返す方法は?

  26. 26

    子の値の子を取得し、Javaストリーム演算子を使用してマップとして収集する方法

  27. 27

    java-値としてリストを使用してマップ内の単語を検索する

  28. 28

    ラムダ(java.util.stream.Streams.zip)でJDK8を使用してストリームを圧縮する

  29. 29

    Java <Streams>リストのコンポーネントの数に基づいて、オブジェクトのリストを並べ替える方法

ホットタグ

アーカイブ