comparable与comparator的使用
两个接口目的都是用来比较大小的,comparable接口 般由需要的类来实现,并且重写compareTo()方法,comparable接口中仅有compareTo()一个方法需要被重写 内联代码片
。
public class Person implements Comparable<Person>{
private String name;
private int age;
public Person() {
}
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 int compareTo(Person o) {
return this.age - o.age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
而comparator接口里有多个方法常用的有int compare(T o1, T o2);
boolean equals(Object obj);等,此外还实现了
default Comparator reversed() {
return Collections.reverseOrder(this);
}进行反转输出;
default Comparator thenComparing(Comparator<? super T> other)第一次比较后按第二条件继续比较,
下面为使用代码用例
comparator外部使用 内联代码片
。
实现comparator接口,重写compare与reverse方法
下面展示一些
import java.lang.reflect.Array;
import java.util.*;
import java.util.stream.Collectors;
public class Compare {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
Person p1 = new Person();
p1.setName("小明4");
p1.setAge(20);
list.add(p1);
Person p2 = new Person();
p2.setName("小明2");
p2.setAge(20);
list.add(p2);
Person p3 = new Person();
p3.setName("小明1");
p3.setAge(14);
list.add(p3);
Person P5 = new Person();
P5.setName("小明3");
P5.setAge(35);
list.add(P5);
System.out.println("list从小到大排序00000000000000000000000000000000000");
Collections.sort(list);
System.out.println(list);
System.out.println("list从大到小重写compare11111111111111111111111111111111111111111");
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.getAge()-o1.getAge();
}
});
System.out.println(list);
System.out.println("list从小到大通过重写congpare2222222222222222222222222222222222222222");
ComparatorTest comparatorTest = new ComparatorTest();
//这里是重写compare方法实现
Collections.sort(list,new ComparatorTest());
System.out.println(list);
System.out.println("list从大到小通过反转333333333333333333333333333333333333333");
Collections.sort(list,new ComparatorTest().reversed());
System.out.println(list);
System.out.println("通过comparing与thencomparing444444444444444444444444444444444444");
list = list.stream().sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName)).collect(Collectors.toList());
System.out.println(list);
}
}
运行结果如下图: