根据时间字段对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(); } } } ```排序方法