ArrayList
タイプがPerson
あり、その人の年齢に基づいて並べ替えたい: person.getAge()
。
人々のリストが年齢順に並べられるようにするにはどうすればよいですか?
ArrayList
タイプが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
実装することもできますComparable<Person>
。ただし、1 つの属性でのみ並べ替えることができます。
コメントを拡張すると、次の行に沿ったものになります。
Collections.sort(personList, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return new Integer(p1.getAge()).compareTo(p2.getAge());
}
});
関連文書
属性 Onlycomparator
を使用して比較する を定義します。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());
}
});
//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...