1

可能重复:
根据姓名对联系人的 ArrayList 进行排序?
ArrayList的排序

我有一个ArrayListof 类型Person,我想根据这个人的年龄对其进行排序:person.getAge().

我怎样才能做到这一点,以便按年龄排序人员列表?

4

4 回答 4

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);改用。

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

于 2012-12-02T19:24:50.530 回答
1

扩展评论,大致如下:

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

相关文件

于 2012-12-02T19:24:56.480 回答
0

定义您的comparator,它使用age属性 O​​nly 进行比较。在集合排序方法中使用相同的方法 [ 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());
             }
         });
于 2012-12-02T19:27:46.303 回答
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...
于 2012-12-02T19:31:35.917 回答