如何根据对象的内容对ArrayList进行排序

时间:2012-12-02 19:21:00

标签: java arraylist

  

可能重复:
  Sorting an ArrayList of Contacts based on name?
  Sorting of ArrayList

我的ArrayList类型为Person,我想根据此人的年龄对其进行排序:person.getAge()

我该如何做到这一点,以便按照年龄排序人员名单?

4 个答案:

答案 0 :(得分:2)

ArrayList<Person> people = . . .;
Collections.sort(people, new Comparator<Person>() {
        @Override
        public int compare(Person o1, Person o2) {
            final int age1 = o1.getAge();
            final int age2 = o2.getAge();
            return age1 < age2 ? -1 : age1 > age2 ? 1 : 0;
        }
    }
);

在Java 7中,您可以改为使用return Integer.compare(age1, age2);

或者,您可以Person实施Comparable<Person>。但是,您只能对一个属性进行排序。

答案 1 :(得分:1)

扩展评论,这些内容如下:

Collections.sort(personList, new Comparator<Person>() {
    @Override
    public int compare(Person p1, Person p2) {
        return new Integer(p1.getAge()).compareTo(p2.getAge());
    }
});

相关文档

答案 2 :(得分:0)

定义comparator,仅使用age属性进行比较。在集合排序方法[ sort(java.util.List,java.util.Comparator)]中使用相同的方法(http://docs.oracle.com/javase/7/docs/api/java /util/Collections.html#sort(java.util.List,java.util.Comparator))接受比较器。

        Collections.sort(peopleList, new Comparator<Person>(){
             @Override
             public int compare(Person p1, Person p2) {
                return Integer.valueOf(p1.getAge()).compareTo(p2.getAge());
             }
         });

优化以下优化,因为Integer.compareTo内部使用Integer.compare方法。

       Collections.sort(peopleList, new Comparator<Person>(){
             @Override
             public int compare(Person p1, Person p2) {
                return Integer.compare(p1.getAge(), p2.getAge());
             }
         });

答案 3 :(得分:0)

//We can do using TreeMap
//i.e
TreeMap treemap=new TreeMap<int,Person>
//trace over person
for(Person p:YourPersonArrayList)
{
treemap.put(p.getAge(),p);
}
//Finally you get TreeMap which is 
//sorted on Persons age...
相关问题