Java对List进行排序

 昨天遇到了一个问题,从数据库中获取的数据虽然是经过排序了的,但是到了访问层的时候,又变换了一次格式,是数据的格式固定了。当时想到了一个就是对返回的集合进行排序,引发了下面的问题,怎么对集合进行排序呢。
当时想到的第一个方法就是Collections.sort(list)
这个方法还有一个重载的方法Collections.sort(list, comparator)
首先要么这个list实现Comparator接口,要么就直接去写一个匿名内部类进行排序。
当然了,我为了这个排序的接口能够进行通用性,想了很多办法,这里写出了一个例子。
(不是很完善,我想到的是使用泛型,然后反射出类,然后获取类的每一个属性,然后根据不同的属性可以进行不同的排序,这里还没有做到。有思路的人可以指点一下,主要是反射哪里遇到了一点问题。)
package com.xxz.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test1 {
	public static void test() {
		List<A> as = new ArrayList<A>();
		as.add(new A(1, 1, 1));
		as.add(new A(4, 4, 4));
		as.add(new A(2, 2, 2));
		as.add(new A(5, 5, 5));
		as.add(new A(3, 3, 3));
		// 根据E1降序
		Collections.sort(as, new EOrder(1, 2));
		print(as);
	}
	public static void main(String[] args) {
		test();
	}
	public static void print(List objs) {
		for (Object obj : objs) {
			System.out.print(obj + "\t");
		}
	}	
}
class EOrder implements Comparator<A> {
	private int flag; // 1 表示升序, 0 表示降序
	private int eType; //表示 比较的类型 1 表示e1, 2 表示e2 3表示e3

	public EOrder(int flag, int eType) {
		this.flag = flag;
		this.eType = eType;
	}

	public int compare(A o1, A o2) {
		switch (eType) {
		case 1:
				switch (flag) {
				case 1:
					if (o1.getE1() > o2.getE1()) {
						return 1;
					} else {
						return 0;
					}
				case 0:
					if (o1.getE1() < o2.getE1()) {
						return 1;
					} else {
						return 0;
					}
				}
		case 2:
			switch (flag) {
			case 1:
				if (o1.getE2() > o2.getE2()) {
					return 1;
				} else {
					return 0;
				}
			case 0:
				if (o1.getE2() < o2.getE2()) {
					return 1;
				} else {
					return 0;
				}
			}
		case 3:
			switch (flag) {
			case 1:
				if (o1.getE3() > o2.getE3()) {
					return 1;
				} else {
					return 0;
				}
			case 0:
				if (o1.getE3() < o2.getE3()) {
					return 1;
				} else {
					return 0;
				}
			}
		}
		return -1;
	}
}

class A {
	private int e1;
	private int e2;
	private int e3;

	public A() {
	}

	public A(int e1, int e2, int e3) {
		this.e1 = e1;
		this.e2 = e2;
		this.e3 = e3;
	}

	public int getE1() {
		return e1;
	}

	public void setE1(int e1) {
		this.e1 = e1;
	}

	public int getE2() {
		return e2;
	}

	public void setE2(int e2) {
		this.e2 = e2;
	}

	public int getE3() {
		return e3;
	}

	public void setE3(int e3) {
		this.e3 = e3;
	}

	@Override
	public String toString() {
		return "A [e1=" + e1 + ", e2=" + e2 + ", e3=" + e3 + "]";
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值