首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

List 中的对象怎么根据某个字段进行排序?

2012-01-05 
List 中的对象如何根据某个字段进行排序?急!我有一个ArrayList,里面放的是一些对象,我根据对象的某个字段

List 中的对象如何根据某个字段进行排序?急!
我有一个ArrayList,里面放的是一些对象,我根据对象的某个字段对ArrayList中的对象进行排序,但是不知道怎么做?请知道的帮一下,谢谢!

[解决办法]
List arr = new ArrayList();
arr.add("哈哈");
arr.add("2");
arr.add("1");
arr.add("5");
arr.add("3");
arr.add("4");
Object[] temp = arr.toArray();
Arrays.sort(temp);
arr = (List) Arrays.asList(temp);
System.out.println(arr);
[解决办法]

Java code
        List list = new ArrayList();                //......                        Collections.sort(list, new MyComparator());                class MyComparator implements Comparator        {            //这里的o1和o2就是list里任意的两个对象,然后按需求把这个方法填完整就行了            public int compare(Object o1, Object o2)            {                //比较规则            }        }
[解决办法]
探讨
Java code
List list = new ArrayList();

//......


Collections.sort(list, new MyComparator());

class MyComparator implements Comparator
{
//这里的o1和o2就是list里任意的两个对象,然后按需求把这个方法填完整就行了
public int compare(Object o1, Object o2)
{
//比较…

[解决办法]
探讨
List arr = new ArrayList();
arr.add("哈哈");
arr.add("2");
arr.add("1");
arr.add("5");
arr.add("3");
arr.add("4");
Object[] temp = arr.toArray();
Arrays.sort(temp);
arr = (List) Arrays.asList(temp);
System.out.println(arr);

[解决办法]
重写public int compare(Object o1, Object o2)这个方法.
[解决办法]
探讨
引用:
Java code
List list = new ArrayList();

//......


Collections.sort(list, new MyComparator());

class MyComparator implements Comparator
{
//这里的o1和o2就是list里任意的两个对象,然后按需求把这个方法填完整就行了
public int compare(Object o1, Object o2)


[解决办法]
5楼说的对~~~~~~~~~~~~~~~~~~~~~~~
[解决办法]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test1 {
private String a;

private String b;

public Test1() {

}

public Test1(String a, String b) {
this.a = a;
this.b = b;
}

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}

public String getB() {
return b;
}

public void setB(String b) {
this.b = b;
}

private List mySort(List arr) { // 交换排序->冒泡排序
Test1 temp = null;
boolean exchange = false;
for (int i = 0; i < arr.size(); i++) {
exchange = false;
for (int j = arr.size() - 2; j >= i; j--) {
if (((Test1) arr.get(j + 1)).getA().compareTo(
((Test1) arr.get(j)).getA()) >= 0) {


temp = (Test1) arr.get(j + 1);
arr.set(j + 1, (Test1) arr.get(j));
arr.set(j, temp);
exchange = true;
}
}
if (!exchange)
break;
}
return arr;
}

public static void main(String[] args) {
List arr = new ArrayList();
Test1 test = new Test1("1", "dssags");
arr.add(test);
test = new Test1("3", "dssags");
arr.add(test);
test = new Test1("2", "dssags");
arr.add(test);
test = new Test1("5", "dssags");
arr.add(test);
test = new Test1("4", "dssags");
arr.add(test);
test = new Test1("6", "dssags");
arr.add(test);

Test1 operation = new Test1();
arr = operation.mySort(arr);
for (int i = 0; i < arr.size(); i++) {
System.out.println(((Test1) arr.get(i)).getA());
}
}
}


[解决办法]
根据boolean咋排哦,就两个值
[解决办法]

探讨
恩,所以才发愁呢.但是要求就是要根据true,false排序!

[解决办法]
假设要对类Test按照字段num排序
如下例:
Java code
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;class Test implements Comparator {    private int num;    public int getNum() {        return num;    }    public void setNum(int num) {        this.num = num;    }    public int compare(Object o1, Object o2) {        if (((Test) o1).getNum() > ((Test) o2).getNum())            return 1;        return 0;    }}class TestExecute {    public static void printList(List<Test> list)    {        for (Test test : list)            System.out.print(test.getNum()+" ");    }    @SuppressWarnings("unchecked")    public static void main(String[] args) {        List<Test> list = new ArrayList<Test>();        for (int i = 10; i > 0; --i) {            Test test = new Test();            test.setNum(i);            list.add(test);        }        System.out.println("排序前:");        printList(list);                Collections.sort(list, new Test());                System.out.println("\n排序后:");        printList(list);            }}
[解决办法]
Collections.sort(list,new Comparator(){
public int compare(Object o1, Object o2) {
if((o1 instanceof MyClass) && (o2 instanceof MyClass)){
return ((MyClass)o1).isOK > ((MyClass)o2).isOK);
}
}
});

[解决办法]
探讨
我想根据boolean进行排序,这样也可以吗?

[解决办法]
探讨
引用:
引用:
Java code
List list = new ArrayList();

//......


Collections.sort(list, new MyComparator());

class MyComparator implements Comparator
{
//这里的o1和o2就是list里任意的两个对象,然后按需求把这个方法填完整就行了
public int com…

[解决办法]
如果没有第二排序关键字,同样的是 true 的话就是按照原来的顺序排列,原先在前排序后也是在前的。


[解决办法]

Java code
1:/** * 比较器 Collections.sort(list, myCompatator); *  * @param aone */class MyComparator implements Comparator {    public int compare(Object arg0, Object arg1) {        YouType cop1 = (YouType) arg0;        YouType cop2 = (YouType) arg1;        int flag = cop1.getOrderId().compareTo(cop2.getOrderId());        return flag;    }}2:MyComparator myCompatator = new MyComparator();Collections.sort(docsU, myCompatator);// 排序
[解决办法]
ArrayList 是有序的 使用范型 ArrayList<Object> list = new ArrayList<Object>();

然后 Object implements Comparator 接口 实现里面的 compareTo 方法
那么 ArrayList在排序时会自动掉用 上面你实现的compareTo方法进行排序的
[解决办法]
Java code
        List<ShushanRelationInfoPOJO> list = new ArrayList<ShushanRelationInfoPOJO>();        //..............                Collections.sort(list, new Comparator<ShushanRelationInfoPOJO>()        {            public int compare(ShushanRelationInfoPOJO o1, ShushanRelationInfoPOJO o2)            {                boolean onLine1 = o1.isOnline();                boolean onLine2 = o2.isOnline();                if(onLine1 ^ onLine2)                {                    return onLine1? -1: 1;                }                else                {                    return 0;                }            }        }); 

热点排行