javarunnable接口的用处(你真的了解java.util.Comparator接口吗)
javarunnable接口的用处(你真的了解java.util.Comparator接口吗)private String name;class Person{import java.util.List;import java.util.ArrayList;import java.util.Comparator;
java.util.Comparator接口java.util.Comparator接口在Java 8发布时做了重大改变,增加了很多静态方法和默认方法,让我们不用实现Comparator接口就可以得到比较器对象。同时在java.util.List接口中增加了sort(Comparator<? super E> c)方法,使用比较器对象对列表中的元素进行排序。这样,就不需要使用Collections类来对列表进行排序了。
自然顺序比较Comparable对象的比较器
代码示例
最后上示例代码。
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
class Person{
private String name;
private int age;
private int salary;
public Person(String name int age int salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public int getSalary(){
return salary;
}
public String toString(){
return String.format("(name-%s | age-%d | salary-%d)" name age salary);
}
}
public class UseComparator{
public static void main(String[] args){
List<Person> list = new ArrayList<Person>();
list.add(new Person("zhangsan" 25 3000));
list.add(new Person("lisi" 30 5000));
list.add(new Person("wangwu" 22 3000));
list.add(new Person("zhaoliu" 26 4000));
// 先以年龄排序(升序),再以薪水排序(升序)
list.sort(
Comparator.comparingInt(Person::getAge)
.thenComparingInt(Person::getSalary));
System.out.println(list);
System.out.println();
// 先以薪水排序(降序),再以年龄排序(升序)
list.sort(
Comparator.comparingInt(Person::getSalary)
.reversed()
.thenComparingInt(Person::getAge));
System.out.println(list);
System.out.println();
// 先以姓名排序(升序),再以年龄排序(升序)
list.sort(
Comparator.comparing(Person::getName)
.thenComparingInt(Person::getAge));
System.out.println(list);
}
}