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

本文章适用于时间格式不正常的情况,如时间为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();
                }
            }
        }
```排序方法
经验分享 程序员 微信小程序 职场和发展