java如何自定義List中的sort()排序,用於日期排序

java 自定義List中的sort()排序

1、問題描述

List是java中一個有序可重復的的集合,其中自帶的.sort()排序方法,該方法在針對純數字類型List集合排序的時候很有效。但是對於裝入其他類型的List集合,自帶的sort()方法排序我們很難控制,比如一個日期集合的排序。

2、解決方法

java中List允許我們自定義sort()排序方法,以下自定義瞭List集合的sort排序方法,用於對一個字符串類型的日期集合進行排序。

//待排序的集合
List<String> list=new ArrayList<String>();
list.add("2019-06");
list.add("2019-11");
list.add("2019-02");
list.add("2019-09");
list.add("2019-05");
//自定義list排序,集合數據(月份)按升序排序;
final SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM");
Collections.sort(list, new Comparator<String>(){
    @Override
 public int compare(String month1, String month2) {
  int mark = 1;
  try {
      Date date1 = sdft.parse(month1);
      Date date2 = sdft.parse(month2);
      if(date1.getTime() < date2.getTime()){
       mark = -1;//調整順序,-1為不需要調整順序;
      }
      if(month1.equals(month2)){
       mark =  0;
  }
  } catch (ParseException e) {
   LOG.error("日期轉換異常", e);
   e.printStackTrace();
  }
 return mark;
 } //compare
});

3、其他

另外java兩個日期類型的對象也可以用如下方法進行比較。

Date() date1=new Date();
Date() date2=new SimpleDateFormat("yyyy-MM-dd").parse("2019-06-11");
Boolean flag;
if(date1.before(date2)){
 flag=true;
}

a.before(b);該方法是判斷a日期是否小於b日期,返回的是一個佈爾類型結果。

Java Collections類:sort()升序排序

正向排序

使用 Collections 類的靜態方法 sort() 可以對集合中的元素進行升序排序。這要求列表中的所有元素都必須實現 Comparable 接口,而且所有元素都必須是使用指定比較器可相互比較的。

sort() 方法主要有如下兩種重載形式

  • void sort(List list):根據元素的自然順序對集合中的元素進行升序排序。
  • void sort(List list,Comparator comparator):按 comparator 參數指定的排序方式對集合中的元素進行排序。
public  class  Test{
    public static void main(String[] args) {
        Student Student =new Student("張1","6M");
        Student Student1 =new Student("張2","1M");
        Student Student2 =new Student("張4","5M");
        Student Student3 =new Student("張5","1M");
        List<Student> list=new ArrayList<Student>();
        list.add(Student);
        list.add(Student1);
        list.add(Student2);
        list.add(Student3);
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return  o2.getAge().compareTo(o1.getAge());
            }
        });
        System.out.println(list.toString());
    } 
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: