Java根據容器(List,ArrayList)內對象的字段排序

用例是這樣的:
一個結果集List,裏面有很多的對象,要求根據對象的字段進行排序。

算法:
1. 對象實現Comparable接口,並從寫compareTo()方法,方法裏是排序規則。
2. 利用Arrays.sort(o)進行排序,不要要注意需要List.toArray();

3. 獲得排序後的List。

具體算法如下:

Java 代碼

import java.util.Date;

/**
 * 需要排序的bean對象。
 * 插入數據時 按照自定義的方式有序排放
 * @author Lucky
 * 日期:2014-10-30
 */
public class ComparableBean implements Comparable<ComparableBean> {

	private int id;

	private String name;

	private Date birthday;

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	/*
	 * 按照id從大到到小的順序排序。 自己可以在方法裏面編寫任意的排序算法。
	 */
	public int compareTo(ComparableBean o) {
		// 根據名字從小到大順序:if(String.CASE_INSENSITIVE_ORDER.compare(getName(), o.getName()) > 0)
		// 根據生日從小到大順序:if (this.birthday.compareTo(o.getBirthday()) > 0) 
		// 根據ID從小到大順序。
		if(this.getId() > o.getId()){
			return 1;
		}else {
			return -1;
		}
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return getId() + " : " + getName() + " : " + getBirthday().toString();
	}
}
排序和測試類:
Java代碼

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Random;

public class TestComparable {

	private TestComparable() {
		ComparableBean cbean;
		Random rand = new Random();
		List<ComparableBean> beans = new ArrayList<ComparableBean>();
		for (int i = 0; i < 100; i++) {
			cbean = new ComparableBean();
			cbean.setId(rand.nextInt(10000));
			cbean.setBirthday(new Date());
			cbean.setName("TestName" + rand.nextInt(1000));
			beans.add(cbean);
		}
		
		Object[] beanObjects = beans.toArray();
		Arrays.sort(beanObjects);

		beans.removeAll(beans);
		System.out.println(beans.size());
		
		for (int i = 0; i < 100; i++) {
			System.out.println(beanObjects[i]);
		}

		System.out.println("ok");
	}

	public static void main(String[] args) {
		new TestComparable();
	}

}

運行結果如下:
0
142 : TestName517 : Thu Oct 30 10:54:35 CST 2014
194 : TestName184 : Thu Oct 30 10:54:35 CST 2014
268 : TestName11 : Thu Oct 30 10:54:35 CST 2014
403 : TestName502 : Thu Oct 30 10:54:35 CST 2014
443 : TestName256 : Thu Oct 30 10:54:35 CST 2014
621 : TestName939 : Thu Oct 30 10:54:35 CST 2014
698 : TestName584 : Thu Oct 30 10:54:35 CST 2014
829 : TestName171 : Thu Oct 30 10:54:35 CST 2014
891 : TestName636 : Thu Oct 30 10:54:35 CST 2014
902 : TestName329 : Thu Oct 30 10:54:35 CST 2014
927 : TestName615 : Thu Oct 30 10:54:35 CST 2014
1252 : TestName734 : Thu Oct 30 10:54:35 CST 2014
1266 : TestName91 : Thu Oct 30 10:54:35 CST 2014
1283 : TestName684 : Thu Oct 30 10:54:35 CST 2014
1343 : TestName522 : Thu Oct 30 10:54:35 CST 2014
1459 : TestName968 : Thu Oct 30 10:54:35 CST 2014
1615 : TestName646 : Thu Oct 30 10:54:35 CST 2014
1644 : TestName951 : Thu Oct 30 10:54:35 CST 2014
1869 : TestName821 : Thu Oct 30 10:54:35 CST 2014
1876 : TestName110 : Thu Oct 30 10:54:35 CST 2014
1879 : TestName999 : Thu Oct 30 10:54:35 CST 2014
1885 : TestName112 : Thu Oct 30 10:54:35 CST 2014
1980 : TestName219 : Thu Oct 30 10:54:35 CST 2014
2158 : TestName900 : Thu Oct 30 10:54:35 CST 2014
2212 : TestName564 : Thu Oct 30 10:54:35 CST 2014
2304 : TestName62 : Thu Oct 30 10:54:35 CST 2014
2337 : TestName913 : Thu Oct 30 10:54:35 CST 2014
2390 : TestName266 : Thu Oct 30 10:54:35 CST 2014
2465 : TestName877 : Thu Oct 30 10:54:35 CST 2014
2559 : TestName274 : Thu Oct 30 10:54:35 CST 2014
2861 : TestName249 : Thu Oct 30 10:54:35 CST 2014
2865 : TestName359 : Thu Oct 30 10:54:35 CST 2014
2923 : TestName650 : Thu Oct 30 10:54:35 CST 2014
3188 : TestName713 : Thu Oct 30 10:54:35 CST 2014
3216 : TestName873 : Thu Oct 30 10:54:35 CST 2014
3376 : TestName78 : Thu Oct 30 10:54:35 CST 2014
3410 : TestName69 : Thu Oct 30 10:54:35 CST 2014
3411 : TestName5 : Thu Oct 30 10:54:35 CST 2014
3436 : TestName702 : Thu Oct 30 10:54:35 CST 2014
3478 : TestName290 : Thu Oct 30 10:54:35 CST 2014
3491 : TestName478 : Thu Oct 30 10:54:35 CST 2014
3584 : TestName70 : Thu Oct 30 10:54:35 CST 2014
3881 : TestName16 : Thu Oct 30 10:54:35 CST 2014
4054 : TestName988 : Thu Oct 30 10:54:35 CST 2014
4138 : TestName854 : Thu Oct 30 10:54:35 CST 2014
4212 : TestName424 : Thu Oct 30 10:54:35 CST 2014
4289 : TestName214 : Thu Oct 30 10:54:35 CST 2014
4390 : TestName542 : Thu Oct 30 10:54:35 CST 2014
4400 : TestName84 : Thu Oct 30 10:54:35 CST 2014
4484 : TestName380 : Thu Oct 30 10:54:35 CST 2014
4504 : TestName70 : Thu Oct 30 10:54:35 CST 2014
4543 : TestName302 : Thu Oct 30 10:54:35 CST 2014
4558 : TestName959 : Thu Oct 30 10:54:35 CST 2014
4624 : TestName736 : Thu Oct 30 10:54:35 CST 2014
4830 : TestName812 : Thu Oct 30 10:54:35 CST 2014
4896 : TestName185 : Thu Oct 30 10:54:35 CST 2014
5018 : TestName715 : Thu Oct 30 10:54:35 CST 2014
5130 : TestName697 : Thu Oct 30 10:54:35 CST 2014
5276 : TestName623 : Thu Oct 30 10:54:35 CST 2014
5367 : TestName326 : Thu Oct 30 10:54:35 CST 2014
5370 : TestName855 : Thu Oct 30 10:54:35 CST 2014
5372 : TestName197 : Thu Oct 30 10:54:35 CST 2014
5510 : TestName115 : Thu Oct 30 10:54:35 CST 2014
5602 : TestName306 : Thu Oct 30 10:54:35 CST 2014
5672 : TestName985 : Thu Oct 30 10:54:35 CST 2014
5678 : TestName266 : Thu Oct 30 10:54:35 CST 2014
6193 : TestName626 : Thu Oct 30 10:54:35 CST 2014
6204 : TestName57 : Thu Oct 30 10:54:35 CST 2014
6261 : TestName39 : Thu Oct 30 10:54:35 CST 2014
6432 : TestName447 : Thu Oct 30 10:54:35 CST 2014
6540 : TestName256 : Thu Oct 30 10:54:35 CST 2014
6692 : TestName24 : Thu Oct 30 10:54:35 CST 2014
6707 : TestName941 : Thu Oct 30 10:54:35 CST 2014
6834 : TestName300 : Thu Oct 30 10:54:35 CST 2014
7009 : TestName249 : Thu Oct 30 10:54:35 CST 2014
7149 : TestName489 : Thu Oct 30 10:54:35 CST 2014
7392 : TestName72 : Thu Oct 30 10:54:35 CST 2014
7443 : TestName911 : Thu Oct 30 10:54:35 CST 2014
7461 : TestName164 : Thu Oct 30 10:54:35 CST 2014
7521 : TestName504 : Thu Oct 30 10:54:35 CST 2014
7684 : TestName148 : Thu Oct 30 10:54:35 CST 2014
7685 : TestName595 : Thu Oct 30 10:54:35 CST 2014
7798 : TestName253 : Thu Oct 30 10:54:35 CST 2014
7865 : TestName7 : Thu Oct 30 10:54:35 CST 2014
7923 : TestName308 : Thu Oct 30 10:54:35 CST 2014
7928 : TestName8 : Thu Oct 30 10:54:35 CST 2014
7963 : TestName283 : Thu Oct 30 10:54:35 CST 2014
8070 : TestName799 : Thu Oct 30 10:54:35 CST 2014
8187 : TestName162 : Thu Oct 30 10:54:35 CST 2014
8209 : TestName682 : Thu Oct 30 10:54:35 CST 2014
8286 : TestName741 : Thu Oct 30 10:54:35 CST 2014
8324 : TestName754 : Thu Oct 30 10:54:35 CST 2014
8442 : TestName268 : Thu Oct 30 10:54:35 CST 2014
8442 : TestName499 : Thu Oct 30 10:54:35 CST 2014
8657 : TestName73 : Thu Oct 30 10:54:35 CST 2014
8846 : TestName498 : Thu Oct 30 10:54:35 CST 2014
8983 : TestName469 : Thu Oct 30 10:54:35 CST 2014
9181 : TestName998 : Thu Oct 30 10:54:35 CST 2014
9464 : TestName37 : Thu Oct 30 10:54:35 CST 2014
9815 : TestName166 : Thu Oct 30 10:54:35 CST 2014
ok
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章