再谈Comparator-使用lambda表达式

来源:互联网 发布:芬尼根的守灵夜 知乎 编辑:程序博客网 时间:2024/06/05 10:07

关于Comparable和Comparator 的区别以及作用:
1. Java 中 Comparable 和 Comparator 比较 - 如果天空不死 - 博客园
2. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法) - Luc - 博客园

正文

先写一个Person类,主要有address跟name两个成员属性以及他们的getter()方法,最后补刀重写toString()方法

public class Person {    private String address;    private String name;    public Person(String firstName, String lastName) {        this.address = firstName;        this.name = lastName;    }    public String getAddress() {        return address;    }    public String getName() {        return name;    }    @Override    public String toString() {        return getClass().getSimpleName()+"{" +                "address='" + address + '\'' +                ", name='" + name + '\'' +                '}';    }}

以前

  • 以前写比较排序的时候,总需要写一大堆代码,比如下面:
public class TestCh06 {    public static void main(String... args) throws CloneNotSupportedException {        //定义一个Person类数组        Person[] arr = {new Person("wo", "2722"), new Person("uj", "2829"), new Person("dh", "272"),                new Person("us", "1"), new Person("jaka", "881711")};        LenComparator lc = new LenComparator();        //排序        Arrays.sort(arr, lc);        System.out.println(Arrays.toString(arr));    }}/** * 按照名字长度来排序的比较器-->主要用于String类型的数组 */class LenComparator implements Comparator<Person> {    @Override    public int compare(Person o1, Person o2) {        return Integer.compare(o1.getName().length(), o2.getName().length());    }}

现在

  • 如今Java8SE出来了很久了,如果还使用上面的代码写作确实有点缺优雅,因为Comparator接口包含了很多方便的静态方法类创建比较器(这些方法可以用于lambda表达式或者方法引用)
        //按照名字进行排序        Arrays.sort(arr, Comparator.comparing(Person::getName));        //按照名字长度进行排序        Arrays.sort(arr,Comparator.comparing(Person::getName,(s,t)->Integer.compare(s.length(),t.length())));        Arrays.sort(arr,Comparator.comparingInt(p->p.getName().length()));        //先按照名字进行排序,如果名字相同,再按照地址比较        Arrays.sort(arr,Comparator.comparing(Person::getName).thenComparing(Person::getAddress));
温馨提示:其实在平常用的比较也不多,只是在需要的时候才用到,更希望大家可以掌握一些lambda表达式更好


————-我是低调的分割线————————–

如果对你有帮助,可以点击“推荐”哦`(*∩_∩*)′

PS:可爱的动画感谢博客园的萌小Q博主,其实还是蛮希望跟她成为好友的,她做的博客内容写的很好

原创粉丝点击