自然排序的方式有两种
一、实现Comparable接口,重写CompareTo()方法
package cn.itlaobing.action;
import java.util.*;
/**
* 实现 Comparable接口
*/
public class Student implements Comparable<Student>{
private Integer id;
private String name;
private Integer age;
public static void main(String[] args) {
Student student1 = new Student(2,"张无忌",23);
Student student2 = new Student(1,"张无忌",27);
Student student3 = new Student(8,"张无忌",21);
Student student4 = new Student(4,"张无忌",18);
Student student5 = new Student(7,"张无忌",28);
List<Student> list = new ArrayList<Student>();
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
list.add(student5);
Collections.sort(list);
for( Student s:list){
System.out.println(s);
}
}
/**
* 带参数的构造方法
* @param id
* @param name
* @param age
*/
public Student(Integer id,String name,Integer age){
this.id = id;
this.name = name;
this.age = age;
}
/**
* 重写toString方法
* @return
*/
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
/**
* 重写 Comparable接口的compareTo()方法,对学生的年龄进行自然排序
* @param o
* @return
*/
@Override
public int compareTo(Student o) {
if(this.age>o.age){return 1;}
if(this.age==o.age){return 0;}
if(this.age<o.age){return -1;}
return this.age.compareTo(o.age);
}
}
二、实现Comparator 接口
Collections.sort(students, new Comparator<Student>() {
public int compare(Student o1, Student o2) {
if(null == o1.getAge()) {
return 1;
}
if(null == o2.getAge()) {
return -1;
}
return o2.getAge().compareTo(o1.getAge());
}
});
System.out.println("自定义对象,降序排序:");
for(Student student : students) {
System.out.println(student.toString());
}