按值对 linkedhashmap 进行降序排序

sort descending linkedhashmap by value

我有 3 个 hashmap :

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

上面3个hashmap的区别只是value,key是一样的

这是我添加 tokenUnikWeight 的键和值的方法:

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

我想将它们全部打印出来,但是按照 tokenUnikWeight 的值

降序排列

这是我的排序代码:

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;

}

这是我的打印代码:

tokenUnikWeight = sortHashMap();

for (String key5 : tokenUnikWeight.keySet()) {
   System.out.printf("%s - %d - %d - %f\n", key5, tokenUnikTF.get(key5), tokenUnikDF.get(key5), tokenUnikWeight.get(key5));
 }

输出是我在某些 tf 和 df 中得到的 null 我的体重也是按升序而不是降序排序的:

请有人帮助我,我做了很多谷歌搜索但还是一样,它 return 在某些 tf 和 df 中为空。

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

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