arraylist中是一个自定义的数据结构:
数据结构是这样的, 
id       类型           数据1          数据2 
01       天               1               2 
02       天               2               0 
03       地               1               1 
04       天               4               3 
05       人               1               2 
06       人               1               0 
07       地               1               2 
08       天               2               0 我的问题是:如何先按类型再按ID,甚至再按数据1、数据2排序给这个list排序,有建议的朋友都有份。

解决方案 »

  1.   

    自己写一个Comparator,用Collections.sort(list,Comparator)排.
      

  2.   


    public class Test_Comparator { public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    for(int i = 10; i >= 0; i--) {
    list.add(i);
    }
    @SuppressWarnings("unused")
    Comparator<Integer> comparator = new Comparator<Integer>() {
    public int compare(Integer o1, Integer o2) {
    // TODO Auto-generated method stub
    return o1 > o2 ? 1 : -1;
    }
    };
    Collections.sort(list,comparator);
    for(int a : list) {
    System.out.println(a);
    }
    }
    }
      

  3.   

    如何先按类型再按ID,甚至再按数据1、数据2排序给这个list排序上面是你的原话,按ID排了,如果id是唯一的,其它数据就定死了,
      

  4.   

    自己写一个Comparator,按照你的规则排序不就得了。
      

  5.   

    这也应该容易啊...在Comparator多嵌几层if
      

  6.   

    if条件下的语句是什么?继续写新的Comparator然后调用Collections.sort()方法分类?
      

  7.   


    没有定死,只是不同级别的优先级排序。在id的基础上在排序,id不是数据库的表。
      

  8.   


    我也认为在ID的基础上  ID没重复的  那就不用排了  肯定已经确定了顺序
      

  9.   


    import java.util.*;class MyClass{
    String name;
    String age;
    String sex;
    MyClass(String name,String age,String sex){
    this.name=name;
    this.age=age;
    this.sex=sex;
    }
    public String toString(){
    return "Name: "+name+" Age: "+age+" Sex: "+sex;
    }
    }public class Test2{
    public static void main(String[] args){
    ArrayList<MyClass> li=new ArrayList<MyClass>();
    li.addAll(Arrays.asList(new MyClass("zs 张三","20","男"),
                            new MyClass("ls 李四","20","女"),
                            new MyClass("ls 李四","23","男"),
                            new MyClass("zs 张三","20","女"),
                            new MyClass("ls 李四","19","女"),
                            new MyClass("ww 王五","20","男"),
                            new MyClass("ww 张三","19","女")
                            ));
    System.out.println("原始数据:");
    for(MyClass mc:li){
    System.out.println(mc);
    } //下面就是用一个匿名类Comparator的对象来对li排序:
    //按name排序,如果name相同,再按age排,如果前两者还相同,再按sex排
                        //
    Collections.sort(li,new Comparator<MyClass>(){
    public int compare(MyClass mc1,MyClass mc2){
    if(mc1.name.equals(mc2.name)){
    if(mc1.age.equals(mc2.age)){
    return mc1.sex.compareTo(mc2.sex);
    }else{
    return mc1.age.compareTo(mc2.age);
    }
    }else{
    return mc1.name.compareTo(mc2.name);
    }
    }
    public boolean equals(Object o){
    return false;
    }
    });
    System.out.println("排序之后:");
    for(MyClass mc:li){
    System.out.println(mc);
    }
    }}F:\java>java Test2
    原始数据:
    Name: zs 张三 Age: 20 Sex: 男
    Name: ls 李四 Age: 20 Sex: 女
    Name: ls 李四 Age: 23 Sex: 男
    Name: zs 张三 Age: 20 Sex: 女
    Name: ls 李四 Age: 19 Sex: 女
    Name: ww 王五 Age: 20 Sex: 男
    Name: ww 张三 Age: 19 Sex: 女
    排序之后:
    Name: ls 李四 Age: 19 Sex: 女
    Name: ls 李四 Age: 20 Sex: 女
    Name: ls 李四 Age: 23 Sex: 男
    Name: ww 张三 Age: 19 Sex: 女
    Name: ww 王五 Age: 20 Sex: 男
    Name: zs 张三 Age: 20 Sex: 女
    Name: zs 张三 Age: 20 Sex: 男