【问题标题】:sort descending linkedhashmap by value按值对linkedhashmap进行降序排序
【发布时间】:2016-03-10 13:38:15
【问题描述】:

我有 3 个哈希图:

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,我的体重也按升序而不是降序排序:

请有人帮帮我,我用谷歌搜索了很多,但还是一样,它在某些 tf 和 df 中返回 null。

【问题讨论】:

    标签: java sorting dictionary hashmap linkedhashmap


    【解决方案1】:

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

    【讨论】:

    • 谢谢你帮我降序^^
    【解决方案2】:

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

    【讨论】:

    • 你说:上面3个hashmap的区别只是在value上,他们的key是一样的。至于空值,您确定这些键存在并且它们的值在 tokenUnikTF、DF 中不为空吗?
    • 其实tokenUnikWeight的key是基于tokenUnikTF的:代码如下: for (String key5 : tokenUnikTF.keySet()) { tokenUnikWeight.put(key5, calculateWeight()); }
    • key 可能存在,但如果没有值,它会打印 null。
    • 我做到了。哈哈谢谢你。你说得对,TF 中有空值 ;) tysm
    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多