按值对降序的linkedhashmap进行排序

时间:2015-12-05 17:15:27

标签: java sorting dictionary hashmap linkedhashmap

我有3个hashmap:

{ 1, 2, 4, 6 }

上面3个hashmap之间的区别仅在于值,它们的键是相同的。

这里是我如何添加tokenUnikWeight的键和值:

Map<String, HashMap<String, Integer>> tokenUnikTF= new LinkedHashMap<>();
Map<String, HashMap<String, Integer>> tokenUnikDF= new LinkedHashMap<>();
Map<String, HashMap<String, Double>> tokenUnikWeight= new LinkedHashMap<>();

我想将它们全部打印在一起,但是按照降序由tokenUnikWeight的值

这是我的排序代码:

for (String key5 : tokenUnikTF.keySet()) {
    tokenUnikWeight.put(key5, calculateWeight());
 }

这是我的打印代码:

public static LinkedHashMap<String,Double> sortHashMap() {
    List<Map.Entry<String, Double>> list = new LinkedList<>(tokenUnikWeight.entrySet());
    Collections.sort(list, new Comparator<Map.Entry<String, Double>>() {

        @Override
        public int compare(Map.Entry<String, Double> o1, Map.Entry<String, Double> o2) {
            return (o1.getValue()).compareTo(o2.getValue());
        }
    });

    Map<String, Double> result = new LinkedHashMap<>();
    for (Map.Entry<String, Double> entry : list) {
        result.put(entry.getKey(), entry.getValue());
    }
    return (LinkedHashMap<String, Double>) result;

}

输出是我在某些tf中得到null而且df我的重量也按升序而不是降序排序: i got null output

有人帮助我,我做了很多谷歌搜索,但仍然相同,它在某些tf和df中返回null。

2 个答案:

答案 0 :(得分:1)

将比较器更改为:return (o2.getValue()).compareTo(o1.getValue());以降序排列。至于空值,你确定在tokenUnikTF,DF中这些键是否存在且它们的值不为空?

答案 1 :(得分:0)

尝试在(o1.getValue()).compareTo(o2.getValue())实施中使用(o2.getValue()).compareTo(o1.getValue())替换Comparator