![](/img/trans.png)
[英]convert List<HashMap<String,String>> to list<map<String,String>> java
[英]java class that extend HashMap <String, Map <String, List<String> > overwrite method put dont work
嗨,我的課有一個問題:
public class JarClassMethod extends HashMap<String,HashMap<String, List<String>>> {
public JarClassMethod() {
super();
}
public List<String> get(String jar,String classe) {
return get(jar).get(classe);
}
public void put(String jar, String classe, List<String> metodi) {
Map<String,List<String>> map2 = new HashMap<>();
map2.put(classe, metodi);
this.put(jar, (HashMap<String, List<String>>) map2);
}
}
如果調用放入 for 循環,我最后只查看 MAP 對象中的最后一個值!
例子:
{"jar1":{classe1:[s,adas,da,sd],
classe2:[asda,fdd,ass],
},
"jar2":{classe3:[s,adas,da,sd],
classe4:[asda,fdd,ass],
}
}
謝謝 問候
如果您為現有鍵添加新值,則Map
覆蓋先前的值。 檢查文檔,其中指出:
如果映射先前包含鍵的映射,則舊值將替換為指定值。
如果您總是使用相同的鍵調用put
,請檢查您的循環。 如果是,最后, Map
將只有一個值,即放入其中的最后一個值。
確保創建一個由map2
引用的新對象,如下所示:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Testing {
public static void main(String[] args) {
HashMap<String,HashMap<String, List<String>>> map=new HashMap<String,HashMap<String, List<String>>>();
Map<String,List<String>> map2;
map2= new HashMap<>();
map2.put("classe1",List.of("s","adas","da","sd"));
map2.put("classe2",List.of("asda","fdd","ass"));
map.put("jar1", (HashMap<String, List<String>>) map2);
System.out.println(map);
map2= new HashMap<>();
map2.put("classe3",List.of("s","adas","da","sd"));
map2.put("classe4",List.of("asda","fdd","ass"));
map.put("jar2", (HashMap<String, List<String>>) map2);
System.out.println(map);
}
}
輸出:
{jar1={classe2=[asda, fdd, ass], classe1=[s, adas, da, sd]}}
{jar2={classe4=[asda, fdd, ass], classe3=[s, adas, da, sd]}, jar1={classe2=[asda, fdd, ass], classe1=[s, adas, da, sd]}}
你put
方法更換內部地圖給定的jar
關鍵,所以只有最后classe
對於給定的jar
密鑰將被保留。 當jar
鍵還沒HashMap
,您應該只放置一個新的內部HashMap
。
方法實現應該是:
public void put(String jar, String classe, List<String> metodi) {
computeIfAbsent(jar, k -> new HashMap<>()).put(classe, metodi);
}
此外,為了防止NullPointerException
,您的get
方法應該是:
public List<String> get(String jar, String classe) {
HashMap<String, List<String>> classeMap = get(jar);
return (classeMap == null ? null : classeMap.get(classe));
}
測試
JarClassMethod jcm = new JarClassMethod();
jcm.put("jar1", "classe1", Arrays.asList("s","adas","da","sd"));
jcm.put("jar1", "classe2", Arrays.asList("asda","fdd","ass"));
jcm.put("jar2", "classe3", Arrays.asList("s","adas","da","sd"));
jcm.put("jar2", "classe4", Arrays.asList("asda","fdd","ass"));
jcm.forEach((k,v) -> System.out.println(k + "=" + v));
輸出
jar2={classe4=[asda, fdd, ass], classe3=[s, adas, da, sd]}
jar1={classe2=[asda, fdd, ass], classe1=[s, adas, da, sd]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.