根据时间字段对list进行排序

本文探讨了在处理不规范时间格式(如2018-9-30而非2018-09-30)时,使用Java中的compareTo方法可能导致的问题,并提出了一种解决方案:将时间字符串转换为Long类型的毫秒值,通过冒泡排序进行有效排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章适用于时间格式不正常的情况,如时间为2018-9-30而不是2018-09-30
至于为什么我们就要来看看compareTo方法
compareTo的源码很简单:
是将那两个比较的值先记录他们的长度,取他们长度的最小值,然后比较他们这个最小值长度里的大小,将他们转化成char数组,一个字符的比较,一旦出现不一样的就返回c1 - c2,如果都一样,那么才返回len1-len2;

public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

一般情况这样也可以处理,但是对于时间如2018-9-30和2018-10-30,当比较到9和1的时间,那么就会将2018-9-30当成更大的值.
所以我的做法是将String类型的时间转换成Long类型的毫秒值,通过毫秒值然后冒泡排序他们就可以了.

private Long StringToLong(String str) throws ParseException {
        String a= str.replaceAll("/", "-");
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = df.parse(a);
        Long time = date.getTime();
        return time;

    }
```将String类型的时间转换为Long类型的毫秒值

```java
for(int i = 0 ; i < tFReport.size() ; i++) {
            for(int j = tFReport.size()-1 ; j > i ; j--) {
                try {
                    Long a = StringToLong((tFReport.get(j).getAssayDate()));
                    Long b = StringToLong((tFReport.get(j-1).getAssayDate()));
                    if(a>b) {
                        TFReport  stu = tFReport.get(j);
                        tFReport.set(j, tFReport.get(j-1));
                        tFReport.set(j-1, stu );
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        }
```排序方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值