小弟遇到一個很怪的問題
明明進else就只有兩次
為何 formlistD 裡面的值會跟 formlistH 一模一樣?
附上我的程式碼
List<Map<String, String>> prpolist=(ArrayList<Map<String, String>>) request.getAttribute("prpo_list");
Map<String, Map<String, String>> formlistH = new HashMap<String, Map<String, String>>();
Map<String, String> formlistD = new HashMap<String, String>();
if(prpolist!=null) {
for (Map<String,String> m: prpolist) {
if(formlistH.containsKey(m.get("form"))) {
Map<String, String> temp = formlistH.get(m.get("form"));
temp.put(m.get("id"), m.get("req"));
formlistH.put(m.get("form"), temp);
loger.debug(formlistH);
loger.debug(formlistD);
}else {
formlistD.put(m.get("id"), m.get("req"));
formlistH.put(m.get("form"), formlistD);
}
}
}
prpolist 的內容長這樣
[{form=Form1Datas, id=INPUT1, req=true}, {form=Form1Datas, id=INPUT2, req=false}, {form=Form1Datas, id=INPUT3, req=true}, {form=Form1Datas, id=PLAN, req=true}, {form=Form1Datas, id=STATUS3, req=true}, {form=Form2Datas, id=STATUS, req=true}, {form=Form2Datas, id=STATUS1, req=false}]
formlistH 最後的資料長這樣
{Form2Datas={STATUS=true, INPUT1=true, STATUS3=true, STATUS1=false, INPUT2=false, INPUT3=true, PLAN=true}, Form1Datas={STATUS=true, INPUT1=true, STATUS3=true, STATUS1=false, INPUT2=false, INPUT3=true, PLAN=true}}
實際上我想要的資料是要長這樣
{Form2Datas={STATUS=true, STATUS1=true}, Form1Datas={INPUT1=true, STATUS3=true, INPUT2=false, INPUT3=true, PLAN=true}}
應該這段邏輯有問題,放資料的方式怪怪的
Map<String, String> temp = formlistH.get(m.get("form"));
temp.put(m.get("id"), m.get("req"));
formlistH.put(m.get("form"), temp);
跟著鄉民看熱鬧
感謝回覆
但我比較不解的是為何
debug
for迴圈第二次的時後
明明就沒有進到else
為何 formlistD 還會再塞值進去..?
formlistH裡面放了formlistD,
只能說你的formlistD 跟 formlistH 程式流程關係要分離,
不然邏輯混亂很正常
formlistD.put(m.get("id"), m.get("req"));
formlistH.put(m.get("form"), formlistD);
跟著鄉民看熱鬧
解決菈
把這段移到else就變成我要的答案囉
Map<String, String> formlistD = new HashMap<String, String>();
只是大概看出問題,功力還不到在腦中實際跑一遍,
最簡單的方式,就是if跟else兩邊都用一個新物件裝看看,
基本就知道問題在哪了