Java初心者です。
お手柔らかにお願いいたします。
実現したいこと
Mapを要素とするList型(List<Map<String,String>>)が2つあり、mapList1とmapList2とします。
中身のデータは、例)のような形になっており、mapList1とmapList2の値をそれぞれ比較して、異なる値だけを別のMapを要素とするList型(「diffValueMapList」とします。)に格納したいです。
比較する際には、mapList1のListの要素単位で、Keyの値が等しいvalueを比較したいです。
以下の例を元にすると、mapList1のList[0]とmapList2のList[0]の中身を比較するのであり、mapList1のList[0]とmapList2のList[1]の中身を比較することはないということです。
diffValueMapListに格納する際は、List[0]の中に、mapList1の値とmapList2の値を格納したいです。
例)
■mapList1
List[0]
-Map(Key=キー①,value=1111)
-Map(Key=キー②,value="あああ")
List[1]
-Map(Key=キー①,value=2222)
-Map(Key=キー②,value="いいい")
List[2]
-Map(Key=キー①,value=2222)
-Map(Key=キー②,value="ううう")
■mapList2
List[0]
-Map(Key=キー①,value=1111)
-Map(Key=キー②,value="かかか")
List[1]
-Map(Key=キー①,value=2222)
-Map(Key=キー②,value="いいい")
List[2]
-Map(Key=キー①,value=2222)
-Map(Key=キー②,value="くくく")
↓
以下のように格納したい
■diffValueMapList
List[0]
-Map(Key=キー②,value="あああ")
-Map(Key=キー②,value="かかか")
List[1]
-Map(Key=キー②,value="ううう")
-Map(Key=キー②,value="くくく")
前提
特にないです。
発生している問題・エラーメッセージ
diffValueMapList1に格納されるデータが想定より少ない。
以下のソースコードで、最終的にはdiffValueMapList1とdiffValueMapList2をまとめた形で戻り値としたかったのですが、diffValueMapList1が想定通りにならなかったため、コードは途中の状態となっております。
該当のソースコード
冗長なコードになっていると思いますが、効率よく比較できるように修正できそうであれば教えて頂きたいです。
Java
1 public List<Map<String, String>> checkMapList(List<Map<String, String>> mapList1, List<Map<String, String>> mapList2){ 2 Map<String,String> diffValueMap1 = new HashMap<>(); 3 Map<String,String> diffValueMap2 = new HashMap<>(); 4 5 List<Map<String, String>> diffValueMapList1 = new ArrayList<>(); 6 List<Map<String, String>> diffValueMapList2 = new ArrayList<>(); 7 8 for(Map<String,String> resultMap11:mapList1){ 9 for(Map.Entry<String, String> resultValue11:resultMap11.entrySet()) { 10 boolean isEqual1 = false; 11 for (Map<String, String> resultMap12 : mapList2) { 12 for (Map.Entry<String, String> resultValue12 : resultMap12.entrySet()) { 13 if(resultValue11.getValue().equals(resultValue12.getValue())) { 14 isEqual1 = true; 15 break; 16 } 17 } 18 } 19 if(isEqual1 == false){ 20 diffValueMap1.put(resultValue11.getKey(),resultValue11.getValue()); 21 diffValueMapList1.add(diffValueMap1); 22 } 23 } 24 } 25 26 for(Map<String,String> resultMap21:mapList2){ 27 for(Map.Entry<String,String> resultValue21:resultMap21.entrySet()){ 28 boolean isEqual2 = false; 29 for(Map<String,String> resultMap22:mapList1){ 30 for(Map.Entry<String,String> resultValue22:resultMap22.entrySet()){ 31 if(resultValue22.getValue().equals(resultValue21.getValue())){ 32 isEqual2 = true; 33 break; 34 } 35 } 36 } 37 if(isEqual2 == false){ 38 diffValueMap2.put(resultValue21.getKey(),resultValue21.getValue()); 39 diffValueMapList2.add(diffValueMap2); 40 } 41 } 42 } 43 return diffValueMapList1; 44 } 45
試したこと
試行錯誤した結果、自分の求める形に一番近い結果となったのが上記コードでした。
補足情報(FW/ツールのバージョンなど)
特にないです。

回答1件
あなたの回答
tips
プレビュー