假设有一个泛型ArrayList<SomeBean>,SomeBean是一个已知的JavaBean,要求按照SomeBean中的某个属性排序,请问该如何编写代码?

解决方案 »

  1.   

    应该设置另一个属性进行排序吧
    单纯的不能排序的  给你一个例子吧  
    希望对你有所帮助!public class StudentSort { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
            ArrayList<Student> list=new ArrayList<Student>();
            Student a=new Student("胖胖",20,90.5);
            Student b=new Student("刘静",20,92.5);
            Student c=new Student("苏凯",20,80.5);
            Student d=new Student("许三多",20,90.5);
            Student e=new Student("成才",20,90.5);
            list.add(a);
            list.add(b);
            list.add(c);
            list.add(d);
            list.add(e);
            Collections.sort(list);
            for(Student s:list){
             System.out.println("px"+s);
            }
    }}
    class Student implements Comparable{
    private String name;

    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public double getScore() {
    return score;
    }
    public void setScore(double score) {
    this.score = score;
    }
    private int age;
    private double score;
    public Student(String s, int i, double d) {
    // TODO Auto-generated constructor stub
    this.name=s;
    this.age=i;
    this.score=d;
    }
    public String toString(){
    return "[Student]"+"name:"+name+"age:"+age+"score:"+score;
    }
    public int compareTo(Object o) {
    // TODO Auto-generated method stub
    Student s=(Student)o;
    return (int) (s.getScore()-this.getScore());
    }
    }
      

  2.   

    用比较器comparator给SomeBean设定大小比较的方式,然后直接排序就可以了
      

  3.   

    lz可以看一下http://zhengweisincere.blog.163.com/blog/static/4984464920112149312408/
    建议还是用comparator,
    comparable在实际项目中不太好用,随便改变一个类的特性项目会出问题的,而且大小比较的特性和类结合起来,重用性和维护起来都麻烦,不小心就会出bug
    comparator就把大小比较的特性和类解耦了,而且还可以定义多种排序方式,是个很实用的东西
      

  4.   

    http://blog.csdn.net/authorzhh/article/details/6734008这个地址。写一个比较器
      

  5.   

    一般的要对一个类进行排序的话,最好在设计这个类的时候就让其实现Comparable接口。如果这个类已经开发完成又要排序那么久要使用一种补救的办法,在设计一个类实现Comparator从而达到实现排序的目的
      

  6.   

    implements Comparable
      

  7.   

    SomeBean implements Comparable
      

  8.   

    给个例子:
    SomeBean.java
    public class SomeBean {
    private String name;
    private int age;

    public SomeBean(){
    name = "";
    age = 0;
    }
    public SomeBean(String name, int age){
    this.name = name;
    this.age = age;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }

    public String toString(){
    return "SomeBean[name = " + name + ", age = " + age + "]";
    }


    }
    SortSomeBean.javaimport java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    import java.util.ArrayList;
    public class SortSomeBean { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<SomeBean> list = new ArrayList<SomeBean>();
    SomeBean a = new SomeBean("zfz",22);
    SomeBean b = new SomeBean("jq", 23);
    SomeBean c = new SomeBean("qq",21);
    list.add(a);
    list.add(b);
    list.add(c);

    System.out.println(list);
    Collections.sort(list, new Comparator<SomeBean>() {
    public int compare(SomeBean a, SomeBean b){
    if(a.getAge() > b.getAge()){
    return 1;
    }
    else if(a.getAge() == b.getAge()){
    return 0;
    }
    else{
    return -1;
    }
    }
    });

    System.out.println(list);
    }}
    还是Comparator比较灵活一点,耦合性小
      

  9.   

    这 ArrayList 添加元素进去  能用for循环添加元素吗?
      

  10.   

    [Quote=引用 2 楼 funfenffun 的回复:]用比较器comparator给SomeBean设定大小比较的方式,然后直接排序就可以了
    [/Quote
    正解