この投稿では、Javaで同じタイプの2つのマップをマージする方法について説明します。このソリューションは、両方のマップのすべてのマッピングを含む新しいマップを返します。マージ操作は、両方のマップに存在する共通のキーを処理します。

1.使用する putAll() 方法

簡単な解決策は、 Map.putAll() 元のマップから別のマップにすべてのマッピングをコピーするメソッド。

ダウンロード  コードを実行する

出力:

{1=A, 2=B, 3=C, 4=D}

 
キーの場合は注意してください k 両方のマップに存在し、の値は hm2 の値を上書きします hm1。すなわち、 map[k] = hm2[k]。例えば、

ダウンロード  コードを実行する

出力:

{1=A, 2=D, 3=C}

 
に余分な電話をかけることを避けることができます putAll() 最初のマップをに渡すことによるメソッド HashMap コンストラクタ。

 
地図の内容を追加する必要がある場合 hm1 マップする hm2、あなたはただすることができます:

2.Guavaの使用

Guavaは、を使用して不変のマップインスタンスを作成するためのビルダーも提供します putAll() メソッド。連続するメソッド呼び出しを連鎖させることができます。

コードをダウンロード

出力:

{1=A, 2=B, 3=C, 4=D}

3.Java8の使用

Java 8以降では、両方のマップの要素のストリームを取得して、 Collectors.toMap() 指定されたマッピング関数を適用して、すべてのマップ要素を新しいマップに収集し、キーと値の識別に役立てます。これを以下に示します。

ダウンロード  コードを実行する

出力:

{1=A, 2=B, 3=C, 4=D}

 
上記のコードはスローします java.lang.IllegalStateException 重複するキーが両方のマップに存在する場合。これを処理するには、同じキーに関連付けられた値間の衝突を解決するマージ関数を提供します。

次のコードは BinaryOperator 重複するキーの値をマージします。ここで、古い値はストリーム内の新しい値よりも優先されます。

ダウンロード  コードを実行する

出力:

{1=A, 2=B, 3=D}

これで、Javaで同じタイプの2つのマップをマージすることができます。