Catanzaro :
Hi i have a problem with this my class:
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);
}
}
if call put in a for cycle i view at end only last value in my MAP object!
example:
{"jar1":{classe1:[s,adas,da,sd],
classe2:[asda,fdd,ass],
},
"jar2":{classe3:[s,adas,da,sd],
classe4:[asda,fdd,ass],
}
}
Thks Regards
Andreas :
Your put
method is replacing the inner map for the given jar
key, so only the last classe
for a given jar
key will be retained. You should only put a new inner HashMap
when the jar
key doesn't already have one.
The method implementation should be:
public void put(String jar, String classe, List<String> metodi) {
computeIfAbsent(jar, k -> new HashMap<>()).put(classe, metodi);
}
Also, to prevent NullPointerException
, your get
method should be:
public List<String> get(String jar, String classe) {
HashMap<String, List<String>> classeMap = get(jar);
return (classeMap == null ? null : classeMap.get(classe));
}
Test
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));
Output
jar2={classe4=[asda, fdd, ass], classe3=[s, adas, da, sd]}
jar1={classe2=[asda, fdd, ass], classe1=[s, adas, da, sd]}
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=218474&siteId=1