How can I have a treeMap which is sorted by value keep being sorted when I change elements?

81 Views Asked by At

I have a map of string keys and int values, I to sort them, and keep them sorted when I change values. I tried using a treemap for the sorted pairs and a normal map for the unsorted paris so I can use it in the comparator, but after a one value passes the other I get a null expection, this is the defenition:

public static TreeMap<String, Long> countryData;
public static ValueComparator bvc;

public static void setCountryData(HashMap<String, Long> map){
    bvc = new ValueComparator(map);
    countryData = new TreeMap<String, Long>(bvc);
    countryData.putAll(map);
    System.out.println(Arrays.toString(countyNames));
    System.out.println(countryData.values());


}

public static class ValueComparator implements Comparator<String> {
    Map<String, Long> base;

    public ValueComparator(Map<String, Long> base) {
        this.base = base;
    }


    public int compare(String a, String b) {
        if(base.get(a).equals(base.get(b))){
            return 0;
        }
        if (base.get(a) > base.get(b)) {
            return -1;
        } else {
            return 1;
        }
    }
}

this is how I change the values:

General.bvc.base.put(country, newValue);
General.countryData.put(country, newValue);

after one value passes another and I try to acces it, I get a null, how can I Do this?

1

There are 1 best solutions below

3
On

How can I have a TreeMap which is sorted by value ..

You can't. They are sorted by key.

...

Irrelevant.