1.利用Collections.sort()方法并重写comparetor类,进行自定义对象排序
2.场景,一般通讯录排序等,列表排序用的很多
3.代码实现,这里为了方便展示都写在了一个类中了
package com.aop.aspect.datastructure;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
//实现比较接口,并重写自定义比较方法!
class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
//自定义排序规则, 返回0 相等 , 1 大于 , -1 小于
//可以自定义用名字字母排序,用年龄排序!
if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o1.getAge() < o2.getAge()) {
return -1;
}
return 0;
}
}
//测试类
@Slf4j
class TestComparator {
public static void main(String[] args) {
//测试
List<Person> personList = Arrays.asList(
new Person("张三", 23),
new Person("李四", 24),
new Person("小明", 12),
new Person("小红", 18));
//这里便于比较打印排序前和排序后的集合
log.info("[排序前的集合] personList {}",personList);
/**
* 利用集合的工具类 public static <T> void sort(List<T> list, Comparator<? super T> c)
* 参数1: 需要排序的集合 参数二: 实现Comparator的类!
*/
Collections.sort(personList,new PersonComparator());
log.info("[排序后的集合] personList {}",personList);
}
}
//person类!
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
4.集合对象 排序前和排序后结果