通过List.sort对元素进行排序,测试阶段没发现,在st测试的时候报了这个错误。“Comparison method violates its general contract!”。

具体堆栈信息:

看起来没什么问题,但是却报了一个错,“比较方法违反其一般合同”。

在 JDK7 版本以上,Comparator 要满足自反性,传递性,对称性,不然 Arrays.sort,Collections.sort会报 IllegalArgumentException 异常。

自反性:当 两个相同的元素相比时,compare必须返回0,也就是compare(o1, o1) = 0;

反对称性:如果compare(o1,o2) = 1,则compare(o2, o1)必须返回符号相反的值也就是 -1;

传递性:如果 a>b, b>c, 则 a必然大于c。也就是compare(a,b)>0, compare(b,c)>0, 则compare(a,c)>0

报错代码:

        // 线索优先级排序// 1.根据来源渠道排序// 2.根据线索状态排序// 3.时间排序clueHostList.sort((first, second) -> {if (first.getDataChannel().equals(second.getDataChannel())){if (first.getFollowUpStatus().equals(first.getFollowUpStatus())){return (int)(first.getGmtCreate().getTime() - second.getGmtCreate().getTime());}return ClueFollowUpStatusOrder.getOrderByCode(first.getFollowUpStatus()) - ClueFollowUpStatusOrder.getOrderByCode(second.getFollowUpStatus());}return ClueDataChanelOrder.getOrderByCode(first.getDataChannel()) - ClueDataChanelOrder.getOrderByCode(second.getDataChannel());});
public static Integer getOrderByCode(Integer clueDataChannel){if (clueDataChannel == null || lookup.get(clueDataChannel) == null){return MAX_ORDER;}return lookup.get(clueDataChannel).getOrder();}

问题原因:

解决办法:不要出现模棱两可的order!!!

public static Integer getOrderByCode(Integer clueDataChannel){if (clueDataChannel == null || lookup.get(clueDataChannel) == null){return Optional.ofNullable(clueDataChannel).orElse(0) + MAX_ORDER;}return lookup.get(clueDataChannel).getOrder();}

排序问题排查Comparison method violates its general contract!相关推荐

  1. java.lang.IllegalArgumentException: Comparison method violates its general contract

    一.简介 本篇文章讨论ArrayList.sort方法报错: java.lang.IllegalArgumentException: Comparison method violates its ge ...

  2. android java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题

    android  java.lang.IllegalArgumentException: Comparison method violates its general contract! 问题 jav ...

  3. fastjson 序列化问题:Comparison method violates its general contract

    fastjson 序列化问题:Comparison method violates its general contract 问题重现 今天在测试接口的时候,调用了Mybatis Plus 分页查询的 ...

  4. java异常排列方式_java中排序报:Comparison method violates its general contract异常的解决...

    前言 上周线上的一段排序的java代码出现了一个Comparison method violates its general contract,在解决这个问题的途中学到了一些知识这里总结分享一下. 异 ...

  5. Collections.sort()排序使用TimSort排序报Comparison method violates its general contract 原因

    前段时间升级JDK后,之前的功能报java.lang.IllegalArgumentException: Comparison method violates its general contract ...

  6. 处理 Comparable接口不严谨导致Comparison method violates its general contract!

    本文主旨是记录问题解决过程 出错的日志 Shutting down VM --------- beginning of crash FATAL EXCEPTION: main Process: com ...

  7. Comparison method violates its general contract!

    最近项目中有许多地方用到了集合排序,不是自然排序,必须的自己实现排序逻辑了. java提供实现排序接口有两个Comparable与Comparator. 我简单理解: 1.Comparable接口是实 ...

  8. java异常:Comparison method violates its general contract解决

    就在五一放假的前一天凌晨,收到一个测试同学发来的消息,说有个接口访问出现了问题,页面如下: 第二天早上紧急查看了线上日志,发现确实是因为这个告警导致返回问题 通过这条堆栈信息查了一些资料 Compar ...

  9. Comparison method violates its general contract 出现原因和解决方法

    错误如下: 代码如下: 刚开始运行,没有什么问题,当我数据量一大的时候,就开时抛出异常,然后一点点拆解,我发现 当nums1和nums2如下时,即list存在太多相同的数组就会抛出这个异常. int[ ...

最新文章

  1. java实现倒计时闹钟_js带闹铃功能的倒计时代码
  2. 整数数组查找java_使用Java编写程序以查找整数数组中的第一个非重复数字?
  3. python绘制3维图-Python 画出来六维图
  4. COP-kMeans限制性--kMeans变体算法研究
  5. python 函数定义先后是否会影响函数之间的相互调用?(不影响)
  6. 以列表形式输出_04 Python之列表、集合和字典的推导式
  7. 浏览器为什么会有兼容性问题
  8. HashOperations
  9. PHP系统发布指什么,cis系统是指什么
  10. php查询对象是否有某个属性可用,JavaScript 判断对象中是否有某属性的常用方法...
  11. IE成长之路--OSPF报文类型
  12. 医院耗材管理系统开发_12
  13. Linux 运维之道笔记-第一章
  14. 书摘—松下幸之助全传
  15. 将《先生请出山》放到桌面上,聊聊如何将视频做成动态壁纸
  16. linux下imwbr1进程,清除挖矿程序(imWBR1,ddg,wipefs),亲测可用
  17. Oracle 删除数据后释放数据文件所占磁盘空间(表空间降高水位)
  18. 九龙证券|人工智能+国产软件+智慧城市概念股火了,欧洲资管巨头大举抄底
  19. 概率分析方法与推断统计(来自我写的python书)
  20. 2011年2月14日 业界新闻摘要

热门文章

  1. java 酒店系统设计_基于Java的酒店管理系统的设计与实现
  2. 传奇脚本显示服务器开区时间代码,传奇时间拓展之定时器脚本命令解释与使用...
  3. 什么是激光切割和线切割?它们有什么区别?
  4. 疯壳AI开源无人机地面站上位机的使用和介绍
  5. QGC地面站二次开发教程一
  6. java小游戏超级玛丽:05.第一关的设计
  7. 手机中的wifi上网是做什么用的?
  8. 想和太阳肩并肩?扒一扒那些上天入海的阿里小二
  9. Android-支付宝支付
  10. Golang入门:Linux上的go语言安装与配置