iT邦幫忙

0

JAVA 關於 Map 一些問題

小弟遇到一個很怪的問題
明明進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}}

1 個回答

0
最佳解答

應該這段邏輯有問題,放資料的方式怪怪的

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兩邊都用一個新物件裝看看,
基本就知道問題在哪了

我要發表回答

立即登入回答