详细:JAVA 对集合list的实体按某一字段(如日期)排序(降序,Collections的sort方法)

最近有时间,就整理整理自己做过的项目~这是某医院的微信网页开发项目。
话不多说,进入正题

情景:现在有一个List,需要对病人每一次的体检记录(Quota)按照日期进行降序排序(即近期放在最前面) 而Collections的sort方法默认是升序排列,如果需要降序排列时就需要重写compare方法。

首先放出compare的注释

 * @param o1 the first object to be compared.
     * @param o2 the second object to be compared.
     * @return a negative integer, zero, or a positive integer as the
     *         first argument is less than, equal to, or greater than the
     *         second.
     * @throws NullPointerException if an argument is null and this
     *         comparator does not permit null arguments
     * @throws ClassCastException if the arguments' types prevent them from
     *         being compared by this comparator.
     */
    int compare(T o1, T o2);

也就是说默认o1和o2比较,如果o1-o2返回负数,则把o1放在o2前面。(升序)

Collections.sort(list, new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;//注意这一行代码
            }
        });

可我现在要实现降序,那么思路应该是

Collections.sort(list, new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;//注意这一行代码
            }
        });

解释完compare方法,下面是该情景解决方案:

    //按日期排序(降序)
    private void ListSort(List<Quota> list) {
        //Collections的sort方法默认是升序排列,如果需要降序排列时就需要重写compare方法
        Collections.sort(list, new Comparator<Quota>() {
            @Override
            public int compare(Quota o1, Quota o2) {
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    //获取体检日期,并把其类型由String转成Date,便于比较。
                    Date dt1 = format.parse(o1.getDate());
                    Date dt2 = format.parse(o2.getDate());

                    //以下代码决定按日期降序排序,若将return“-1”与“1”互换,即可实现升序。
                    //getTime 方法返回一个整数值,这个整数代表了从 1970 年 1 月 1 日开始计算到 Date 对象中的时间之间的毫秒数。
                    if (dt1.getTime() > dt2.getTime()) {
                        return -1;
                    } else if (dt1.getTime() < dt2.getTime()) {
                        return 1;
                    } else {
                        return 0;
                    }

                } catch (Exception e) {
                    logger.info("日期排序出错:"+e);
                }
                return 0;
            }
        });
    }

此外,还有一种实现方式:

list.sort(new Comparator<Student>() {
    @Override
    public int compare(Quota o1, Quota o2) {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                    //获取体检日期,并把其类型由String转成Date,便于比较。
                    Date dt1 = format.parse(o1.getDate());
                    Date dt2 = format.parse(o2.getDate());

                    //以下代码决定按日期降序排序,若将return“-1”与“1”互换,即可实现升序。
                    //getTime 方法返回一个整数值,这个整数代表了从 1970 年 1 月 1 日开始计算到 Date 对象中的时间之间的毫秒数。
                    if (dt1.getTime() > dt2.getTime()) {
                        return -1;
                    } else if (dt1.getTime() < dt2.getTime()) {
                        return 1;
                    } else {
                        return 0;
                    }
    }
});

以上便是全部过程,有啥问题,欢迎评论~~~(๑•ᴗ•๑)

觉得还不错可以点个赞哦~ 谢谢(๑•ᴗ•๑)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值