我有一个ArrayList
of 类型Person
,我想根据这个人的年龄对其进行排序:person.getAge()
.
我怎样才能做到这一点,以便按年龄排序人员列表?
我有一个ArrayList
of 类型Person
,我想根据这个人的年龄对其进行排序:person.getAge()
.
我怎样才能做到这一点,以便按年龄排序人员列表?
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
implement Comparable<Person>
。但是,您只能对一个属性进行排序。
扩展评论,大致如下:
Collections.sort(personList, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return new Integer(p1.getAge()).compareTo(p2.getAge());
}
});
相关文件
定义您的comparator
,它使用age
属性 Only 进行比较。在集合排序方法中使用相同的方法 [ 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());
}
});
//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...