按值的降序对Map进行排序

时间:2015-04-20 03:45:36

标签: java dictionary collections

我一直在尝试按values的降序对地图进行排序,但我现有的代码按keys的降序排序。我如何按值的降序排序? 我的代码:

System.out.println("Unsorted Map:" +merger);
Map<Integer, Double> Sortedmerger = SortByValue(merger); 
System.out.println("Sorted Map: "+ Sortedmerger);

public static TreeMap<Integer, Double> SortByValue  (Map<Integer, Double> map) {
ValueComparator vc =  new ValueComparator(map);
TreeMap<Integer, Double> sortedMap = new TreeMap<Integer, Double>(Collections.reverseOrder());
        sortedMap.putAll(map);
        return sortedMap;
    }   

class ValueComparator implements Comparator<Double> {

    Map<Integer, Double> map;

    public ValueComparator(Map<Integer, Double> base) {
        this.map = base;
    }

    public int compare(Double a, Double b) {
        if (map.get(a) >= map.get(b)) {
            return -1;
        } else {
            return 1;
        } // returning 0 would merge keys 
    }
}

我的输出:

Unsorted Map:{1=0.53, 2=0.48, 23=0.54, 10=0.47}
Sorted Map: {23=0.54, 10=0.47, 2=0.48, 1=0.53}

1 个答案:

答案 0 :(得分:2)

您的地图密钥类型为Integer,因此您必须使用Comparator<Integer>,并且您的compare方法应采用整数输入,并且通过该Integer键,您可以获得map.get(a)和{{的Double值1}}。在map.get(b)构造函数中,您必须定义已创建的比较器类。(即ValueComparator)

参考此代码:

TreeMap