Java中集合排序---点击表头对数据进行排序

时间:2022-09-03 19:15:13

Java中对集合的排序,因为项目中得实现一个点击表头对数据进行排序的功能,当然实现这个效果并不难,你完全可以在点击表头时向Action中发出一个请求,然后在利用排序的Hql语句对数据进行排序,这样你完全可以达到目地;但是性能可就不高了咯。。。。。

     下面介绍下对集合进行自定义的排序,因为很多情况下,集合中的数据保存的都是类对象,我们要对集合进行排序,换句话讲就是根据类中定义的属性对类进行排序。。。Java中对类进行排序处理,满足两个要求,1:实现Comparable接口,实现publicint compareTo(Object o)方法就OK了, 这个compareTo方法返回值是个int类型,若大于0则表示按升序,0表示类对象大小相同,小于0则表示类对像按降序排列了;

 

 

我们举例说明:

 

package com;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

 

public class Book implements Comparable<Book> {

 // 对象的排序方式[升、降]
 private static boolean sortASC = true;

 // 对象的排序属性
 private static boolean sortBybId = false;
 private static boolean sortBybName = false;
 private static boolean sortBybDate = false;

//类属性

 private int bId;
 private String bName;
 private Date bDate;

 

//构造方法

 public Book(int id, String name, Date date) {
     super();
     bId = id;
     bName = name;
     bDate = date;
 }

 

//必须实现的方法

 public int compareTo(Book book) {
  if (sortBybId) {
       if (sortASC)
              return this.bId > book.bId ? 1 : this.bId == book.bId ? 0 : -1;
       else
              return this.bId > book.bId ? -1 : this.bId == book.bId ? 0 : 1;
  } else if (sortBybName) {
        if (sortASC) {
             int result = this.bName.compareTo(book.bName);
             return result;
        } else {
           int result = this.bName.compareTo(book.bName);
          return result > 0 ? -1 : result == 0 ? result : 1;
       }
  } else if (sortBybDate) {
       if (sortASC) {
            int result = this.bDate.compareTo(book.bDate);
            return result;
      } else {
            int result = this.bDate.compareTo(book.bDate);
            return result > 0 ? -1 : result == 0 ? result : 1;
      }
   }
        return 1;  //默认返回值;
 }

 

//测试

 public static void main(String[] args) throws ParseException {
      List<Book> lst = new ArrayList<Book>();
      SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
      lst.add(new Book(1, "aaa",sdf.parse("2001-1-1")));
      lst.add(new Book(4, "fff",sdf.parse("2001-10-5")));
      lst.add(new Book(3, "zzzz",sdf.parse("2001-2-1")));


    //我想按对象的编号升序排列
    // Book.sortASC=true;
    // Book.sortBybId=true;

 

 

     //我想按对象的编号降序排列
     // Book.sortASC=false;
    // Book.sortBybId=true;

  

 

    //我想按对象的姓名降序排列
    // Book.sortASC=false;
    // Book.sortBybName=true;
  
   // 我想按对象的时间降序排列
    Book.sortASC=false;
    Book.sortBybDate=true;

 

    Book[] book = lst.toArray(new Book[] {});
    Arrays.sort(book);    //开发循环调用compareTo方法
    lst = Arrays.asList(book);

 

   //排序后输出

    for (Book b : lst) {
      System.out.println("bid==" + b.bId + "  bName==" + b.bName);
   }
  
  //排序属性值恢复
  Book.sortBybId = false;
  Book.sortBybName = false;
  Book.sortBybDate = false;


  
  // Book[] book = new Book[] { new Book(4, "aaa"), new Book(3, "bbb") };
  // for (Book book2 : book) {
  // System.out.println("bid==" + book2.bId + " bName==" + book2.bName);
  // }
  // Arrays.sort(book);
  // for (Book book2 : book) {
  // System.out.println("bid==" + book2.bId + " bName==" + book2.bName);
  // }
 }

}