java class that extend HashMap <String, Map <String, List<String> > overwrite method put dont work

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
Recommended