Java初心者です。
こちらに投稿するのも初めてとなりますので、どうかお手柔らかにお願いいたします。
ソースコードについては、冗長な部分や適さない変数名を使用している箇所があるかもしれませんが、何か気が付いた点がありましたら教えて頂けると幸いです。
また、実際のコードを抜粋しておりますので、何かおかしな点があるかもしれません。
詳しい方の意見をいただければと思います。
よろしくお願いいたします。
実現したいこと
2つのMapを要素とするList型があります。(List<Map<String,String>>)
KeyListのList1要素分に格納されているKeyとValueの組み合わせを1つの組み合わせとして、DataListに格納されている値と比較して、一致したら該当のDataListのList1要素分全てのKeyとValueを取得したい。
以下を例にすると、KeyListのList[0] (keyName①,3333)(keyName②,5555)に対して
targetDataListのList[1] (keyName①,3333),(keyName②,5555)で一致しているため、targetDataListのList[1]に格納されているkeyName⓪~keyName⑩とそれに対応するValueを取得する。
さらに、この処理をKeyListのList要素分繰り返して、別のMapを要素とするList型に格納、メソッドの戻り値のデータList<Map<String,String>>として返したい。
■KeyList
List[0]
Map keyName① - > 3333
Map keyName② - > 5555
List[1]
Map keyName① - > 7777
Map keyName② - > 9999
■targetDataList
List[0]
Map keyName⓪ - > 0
Map keyName① - > 1111
Map keyName② - > 2222
Map keyName③ - > 1
...
Map keyName⑩ - > 2
List[1]
Map keyName⓪ - > 0
Map keyName① - > 3333
Map keyName② - > 5555
Map keyName③ - > 1
...
Map key⑩ - > 0
前提
特にないです。
発生している問題・エラーメッセージ
比較をして、1つ目の等しいtargetDataListの行は取得できるのですが、それ以降が正しく取得できないです。
該当のソースコード
Java
1public List<Map<String,String> getResult( 2List<Map<String,String>> keyList, 3List<Map<String,String>> targetDataList){ 4int index; 5boolean isEqual = false; 6boolean isExist = false; 7List<Map<String,String>> resultList = new ArrayList<>(); 8 9//一時的に結果を格納するMap 10Map<String,String> tempMap = new LinkedHashMap<>(); 11 12//KeyListのList1要素分に格納されているのが比較キーとその値 13int keyNum = keyList.get(0).size(); 14 15for(int i = 0;i < keyList.size();i++){ 16 index = 0; 17 for(Map.Entry<String,String> entry1 : keyList.get(i).entrySet()){ 18 isExist = false; 19 for(int j = 0;j < targetDataList.size();j++){ 20 for(Map.Entry<String,String> entry2 : targetDataList.get(j).entrySet()){ 21 if(entry1.getKey().equals(entry2.getKey()) && entry1.getValue().equals(entry.2.getValue))){ 22 index++; 23 isExist = true; 24 break; 25 } 26 } 27 if(isExist == true){ 28 tempMap = targetDataList.get(j); 29 break; 30 } 31 } 32 if(index == keyNum){ 33 isEqual = true; 34 } 35 if(isEqual == true){ 36 resultList.add(tempMap); 37 } 38} 39return resuluList; 40} 41 42
試したこと
試行錯誤した結果、上記のコードになりこれ以上は自分の知識では思いつかないと判断しました。
補足情報
特にないです。

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