如果想对自定义的类进行自定义排序的话,这个类就必须实现Comparable或者Comparator接口。
Example:首先定义一个person类,里面有字段name和age。先按name排序,name相同在按照age排序。注:使用了Lombok插件,如何使用可以参考这篇文章:lombok插件的使用
1.1:Comparable接口
person.java
@Builder
@Data
public class Person implements Comparable<Person> {
private String name;
private int age;
/**
* 1.先比较name
* 2.name一样比较age
* */
@Override
public int compareTo(Person o) {
int temp = this.name.compareTo(o.name);
return temp == 0 ? this.age - o.age : temp ;
}
}
测试:
@Test
public void testComparable() {
List<Person> personList = new ArrayList<>(
Arrays.asList(new Person("Bob", 17),
new Person("Anna", 17),
new Person("Anna", 16)));
System.out.println("排序前:" + personList);
Collections.sort(personList);
System.out.println("排序后:" + personList);
}
1.2:Comparator接口
person1.java
@Builder
@Data
public class Person2 implements Comparator<Person2> {
private String name;
private int age;
@Override
public int compare(Person2 o1, Person2 o2) {
int temp = o1.name.compareTo(o2.name);
return temp == 0 ? o1.age - o2.age : temp ;
}
}
两个接口差别并不是特别大,
1):Comparable接口在java.lang包下,自动导入,Comparator接口在java.util包下。很多类,比如String等已经实现了Comparable接口自定义了排序规则。
2):Collections.sort()排序只针对实现Comparable接口的类