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);
// }
}
}