Java Map сортировка по значению

Я искал способы сортировкиMap<String, Integer> по значениям. я нашелэта почта, которая решила мою проблему с сортировкой, но не совсем. Согласно посту, я написал следующий код:

import java.util.*;

public class Sort {

    static class ValueComparator implements Comparator<String> {

        Map<String, Integer> base;

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

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

    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        ValueComparator vc = new ValueComparator(map);
        TreeMap<String, Integer> sorted = new TreeMap<String, Integer>(vc);
        map.put("A", 1);
        map.put("B", 2);
        sorted.putAll(map);
        for (String key : sorted.keySet()) {
            System.out.println(key + " : " + sorted.get(key)); // why null values here?
        }
        System.out.println(sorted.values()); // But we do have non-null values here!
    }
}

Выход:

A : null
B : null
[1, 2]
BUILD SUCCESSFUL (total time: 0 seconds)

Как видно из вывода,get метод всегда возвращаетnull, Причина мояValueComparator.compare() метод никогда не возвращается0что я выяснил, сделавэта почта.

Кто-то предложил в этом посте следующее, чтобы решитьnull проблема стоимости:

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

Я протестировал этот кусок кода, и он представляет проблему слияния ключей. Другими словами, когда значения равны, их соответствующие ключи объединяются.

Я также попробовал следующее:

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

Это тоже не работает. Некоторые из ценностей все ещеnull, Кроме того, у этого обходного пути могут быть логические проблемы.

Кто-нибудь может предложить полностью рабочее решение моей проблемы? Я хотел бы, чтобы функция сортировки по значению работала иget способ работать одновременно.

Ответы на вопрос(4)

Ваш ответ на вопрос