hashMap根据值排序

来源:互联网 发布:科学革命的结构 知乎 编辑:程序博客网 时间:2024/06/04 00:45

根据值排序:

                List<Map.Entry<String, Double>> data = new ArrayList<>(map.entrySet());                Collections.sort(data, new Comparator<Map.Entry<String, Double>>()                {                    public int compare(Map.Entry<String, Double> o1, Map.Entry<String, Double> o2)                    {                        if(o2.getValue()!=null&&o1.getValue()!=null&&o2.getValue().compareTo(o1.getValue())>0){                            return 1;                        }else if(o2.getValue()!=null&&o1.getValue()!=null&&o2.getValue().compareTo(o1.getValue())==0){                            return 0;                        }else {                            return  -1;                        }                    }                });

我在测试时,遇到了java.lang.IllegalArgumentException: Comparison method violates its general contract!
出现这个问题的原因是:
1. 需要判断比对的对象是否为空(不判断也没发现有什么问题)

  1. 不能返回正整数、负整数、0, 而应该返回1 , -1, 0

  2. 必须保证返回值会return 这3种值

  3. 必须保证满足对等3定律

我出现这个问题就是第二步的问题,当时少写了一个比较判断,没有考虑两个值相等的情况。
加上,下面一句话就可以执行成功。

else if(o2.getValue()!=null&&o1.getValue()!=null&&o2.getValue().compareTo(o1.getValue())==0){                            return 0;                        }
原创粉丝点击