您的位置:首页 > 编程语言 > Java开发

Java对List进行排序

2014-08-20 15:22 330 查看
昨天遇到了一个问题,从数据库中获取的数据虽然是经过排序了的,但是到了访问层的时候,又变换了一次格式,是数据的格式固定了。当时想到了一个就是对返回的集合进行排序,引发了下面的问题,怎么对集合进行排序呢。

当时想到的第一个方法就是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 + "]";
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: