可能重复:
Sorting an ArrayList of Contacts based on name?
Sorting of ArrayList
我的ArrayList
类型为Person
,我想根据此人的年龄对其进行排序:person.getAge()
。
我该如何做到这一点,以便按照年龄排序人员名单?
答案 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...