zoukankan      html  css  js  c++  java
  • 记工作中遇到的Date类相关的坑

    • Date的排序问题

            //根据审核时间排序,审核时间晚的后执行
            Collections.sort(executableList, (o1, o2) -> {
    
                if ( o1.getAuditDate().after(o2.getAuditDate())){
                    return 1;
                }
    if (o1.getAuditDate() ==( o2.getAuditDate())) { return 0; } return -1; });

    这段代码被放在了xxljob的handler中,因此最初没有检查出错误,直到发现job执行不成功,

    而把该段代码放在单元测试执行会报错:java.lang.IllegalArgumentException: Comparison method violates its general contract!

    意思是比较方法不满足可逆性,但是按照代码逻辑应该是没有错的,因此肯定是比较的方法有问题

    于是进行更改

    //根据审核时间排序,审核时间晚的后执行
            Collections.sort(executableList, (o1, o2) -> {
    
                if ( o1.getAuditDate().getTime()>(o2.getAuditDate().getTime())){
                    return 1;
                }
                if (o1.getAuditDate().getTime() ==( o2.getAuditDate()).getTime()) {
                    return 0;
                }
                return -1;
            });

    其实不用改这么多,直接把 == 换成.equal()即可(算是低级错误了,以后注意),而点开源码查看

     public boolean equals(Object obj) {
            return obj instanceof Date && getTime() == ((Date) obj).getTime();
        }

    可以看到也是使用getTime()获取时间戳进行比较的

    其实上述写法都太过麻烦,经过查询,直接用java自带的比较器即可解决

    //根据审核时间排序,审核时间晚的后执行
                executableList.sort( Comparator.comparing(PriceReadjustDO::getAuditDate));
  • 相关阅读:
    PhpStorm中如何调整字体大小
    PhpStorm-2017.1.2破解步骤
    Eclipse/MyEclipse 最最常用的快捷键
    Invalid result location value/parameter
    系统重装--相关问题
    喜马拉雅||亲爱的,慢慢行走
    QQ聊天界面模式切换
    myeclipse中如何修改项目的名称
    软考-程序设计语言基础(编译原理)
    软考-计算机组成原理、体系机构与网络安全
  • 原文地址:https://www.cnblogs.com/CodeSpike/p/13274460.html
Copyright © 2011-2022 走看看