应用场景
假如现在在程序中有十个学生对象,这十个对象都放在一个ArrayList中,我们要根据每个Person的年龄从小到大进行排序。或者说,我们要将年龄大于15的Person放到ArrayList的前面部分。如果没有了解过Java为我们提供的Collections.sort(List list)方法,我们可能就要将年龄取出,再做一系列的比较…最恶心的是,还要将取出的年龄跟之前的学生对象保持联系,以达成对学生对象的排序。
但是,Java提供了帮助我们在List中排序POJO的方法,下面来看看如何使用。
确定排序规则,POJO实现Comparable接口
第一步,我们要明确排序规则,我这里是以年龄从小到大排序。
明确了规则之后,让POJO类实现Comparable接口,实现接口中的compareTo(Object o)方法。
如果当前对象与传入对象相比,年龄大于传入的对象,则返回1,表示当前对象要放在传入对象的后面。
如果年龄小于传入对象,返回-1,表示当前对象要放在传入对象的前面。
如果年龄相等,返回0,表示不做对比,不改变位置。
Person.java
public class Person implements Comparable<Person> {
private String name;
private String gender;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return name + ":" + age;
}
public Person(String name, String gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public int compareTo(Person o) {
if(this.age > o.getAge()){
return 1;
}else if(this.age < o.getAge()){
return -1;
}
return 0;
}
}
调用Collection.sort(List list)方法
调用Collections.sort(List list)方法,传入包含Person对象的List,进行排序。
测试排序:
import java.util.ArrayList;
import java.util.Collections;
public class ListSort {
public static void main(String[] args) {
ArrayList<Person> al = new ArrayList<Person>();
al.add(new Person("Tom","F",18));
al.add(new Person("Tommy","M",16));
al.add(new Person("Obas","F",19));
al.add(new Person("Mushell","F",22));
al.add(new Person("Canvs","F",21));
al.add(new Person("Nexus","F",13));
System.out.println(al.toString());
Collections.sort(al);
System.out.println("After sorted:");
System.out.println(al.toString());
}
}
结果
[Tom:18, Tommy:16, Obas:19, Mushell:22, Canvs:21, Nexus:13]
After sorted:
[Nexus:13, Tommy:16, Tom:18, Obas:19, Canvs:21, Mushell:22]