首页 > 编程语言 >java.lang.IllegalArgumentException: Comparison method violates its general contract! 报错

java.lang.IllegalArgumentException: Comparison method violates its general contract! 报错

时间:2024-08-19 14:48:47浏览次数:7  
标签:lang Comparison String wbsCode1 int wbsCode1Temp 报错 wbsCode2Temp wbsCode2

代码:

public static void wbsSort(List<SendMessageEntity> sendMessageEntityList){
        Collections.sort(sendMessageEntityList, (o1, o2) -> {
            String wbsCode1Temp = o1.getWbsCode();
            String wbsCode2Temp = o2.getWbsCode();
            String wbsCode1 = wbsCode1Temp.replaceAll("\\.","");
            String wbsCode2 = wbsCode2Temp.replaceAll("\\.","");

            int pointNum1 = 9-wbsCode1Temp.split("\\.").length;
            int pointNum2 = 9-wbsCode2Temp.split("\\.").length;

            String zero1 = "";
            String zero2 = "";
            for(int index=0;index<pointNum1;index++){
                zero1 += "0";
            }
            for(int index=0;index<pointNum2;index++){
                zero2 += "0";
            }
            wbsCode1 = wbsCode1+ zero1;
            wbsCode2 = wbsCode2 +zero2;
            // 转换为long类型
            long wbsCodeLong1 = Long.parseLong(wbsCode1);
            long wbsCodeLong2 = Long.parseLong(wbsCode2);
            if(wbsCodeLong1 > wbsCodeLong2){
                return 1;
            }else{
                return -1;
            }
        });
    }

  解决办法:

你的比较方法有可能违反了比较合同,因为当 wbsCodeLong1wbsCodeLong2 相等时,方法没有处理平等的情况。你应该在 if 语句之后添加处理相等情况的逻辑,如下:

return Long.compare(wbsCodeLong1, wbsCodeLong2);

里使用 Long.compare 方法来简化比较逻辑,并处理相等情况。这应当符合比较方法的合同,避免异常。

public static void wbsSort(List<SendMessageEntity> sendMessageEntityList){
    Collections.sort(sendMessageEntityList, (o1, o2) -> {
        String wbsCode1Temp = o1.getWbsCode();
        String wbsCode2Temp = o2.getWbsCode();
        String wbsCode1 = wbsCode1Temp.replaceAll("\\.","");
        String wbsCode2 = wbsCode2Temp.replaceAll("\\.","");

        int pointNum1 = 9 - wbsCode1Temp.split("\\.").length;
        int pointNum2 = 9 - wbsCode2Temp.split("\\.").length;

        String zero1 = String.format("%0" + pointNum1 + "d", 0);
        String zero2 = String.format("%0" + pointNum2 + "d", 0);

        wbsCode1 = wbsCode1 + zero1;
        wbsCode2 = wbsCode2 + zero2;

        long wbsCodeLong1 = Long.parseLong(wbsCode1);
        long wbsCodeLong2 = Long.parseLong(wbsCode2);

        return Long.compare(wbsCodeLong1, wbsCodeLong2);
    });
}

  

标签:lang,Comparison,String,wbsCode1,int,wbsCode1Temp,报错,wbsCode2Temp,wbsCode2
From: https://www.cnblogs.com/wwssgg/p/18367295

相关文章

  • 吴恩达力荐,100%好评-LangChain大型语言模型(LLM)应用开发
       LangChain是一个开源框架,旨在帮助人工智能开发者将大语言模型(如GPT-4)与外部计算和数据源结合起来。这个框架提供了Python和JavaScript包,使开发者能够轻松地将自己的数据与大语言模型连接起来,从而实现更复杂的人工智能应用。   免费获取:吴恩达力荐,100%好评-Lang......
  • golang在线客服系统二次开发
    客服源码是使用Golang(又称Go)开发的,Go是Google公司开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go天生支持并发。好处太多就不多说了。全源码客服系统用户,想要针对自己的业务,进行二次开发,那么就需要了解一下我们客服系统的开发逻辑,从而进行定制化的功......
  • Golang杂谈-gorm集成雪花id
    gogetgithub.com/bwmarrin/snowflakepackagemainimport( "fmt" "github.com/bwmarrin/snowflake")funcmain(){ //CreateanewNodewithaNodenumberof1 node,err:=snowflake.NewNode(1) iferr!=nil{ fmt.Println(er......
  • Spring boot事务报错
    1.报错信息系统错误,错误信息:org.springframework.beans.factory.BeanNotOfRequiredTypeException:Beannamed'defaultTx'isexpectedtobeoftype'org.springframework.transaction.PlatformTransactionManager'butwasactuallyoftype'org.spring......
  • VMware报错及调试记录
    VMWare报错记录操作系统Windows10,软件版本16.0.0出现问题:VMWare能够正常开启,虚拟机运行则出现蓝屏按如下顺序尝试方法一:检查电脑支持虚拟化并且已启用【任务管理器--性能】开启“Hyper-V,Windows虚拟机监控程序平台,虚拟机平台”【控制面板-程序和功能】设置完成后,需......
  • 关于解决Qt配置clang format插件后打开Qt时报缺少pythonxxx.dll的问题
    前言原本安装过程中没有出现任何问题,但是当我退出Qt,再次打开Qt时报虽然也不影响正常编程,但是架不住每次打开它都提示,于是准备探究下这个问题,并将其解决掉第一步:在官网下载:clangformat,我下载的是这个第二步:安装LLVM,安装时选择为所有用户添加环境变量,然后全程一步就......
  • [Lang] 函数模板
    [Lang]函数模板1.自动类型推导和显示指定类型自动类型推导不能进行隐式类型转换。显式指定类型可以进行隐式类型转换。但前提是函数模板的参数必须按值传递,因为按引用传递不支持隐式类型转换。#include<iostream>usingnamespacestd;template<typenameT>TmyAdd(T......
  • 关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运
    关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运行的类无法正常运行的问题的解决思路WrongFirst:我准备了一个正常类BG和一个有错误的类HelloWorld,来看看会发生什么。WrongSecond:不出意外的报错了,这似乎和IDEA的默认设置有关。SolveFi......
  • UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf...--web逆向execjs读取j
    背景做web逆向的时候我们通常是纯python模拟js思路或js+python直接逆向,第二种情况下我们要先获取到想要的js代码,js文件内测试接口后,通过python中的`execjs`模块实现相应接口的调用。通常我们会直接从网站扣下需要的代码(分析后硬扣或通过webpack),然后稍加删改和补环境就直接使用......
  • Vue 报错error:0308010C:digital envelope routines::unsupported
    目录Vue报错error:0308010C:digitalenveloperoutines::unsupported方法1.打开终端(按健win+R弹出窗口,键盘输入cmd,然后敲回车)并按照说明粘贴这些:方法2.安装vnm及node版本方法3.在项目package.json文件中增加配置Vue报错error:0308010C:digitalenveloperoutine......