• (2)传递代码


    java8之前,java只允许传基础数值或者对象的引用,而现在java允许传代码了。

    接下来还是以Comparator来举例。

    //匿名内部类
    @Test
    public void java8Test() {
        Person p1 = new Person(22);
        Person p2 = new Person(23);
        Person p3 = new Person(21);
        Person p4 = new Person(20);
        List<Person> list = Lists.newArrayList(p1, p2, p3, p4);
        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                //两个数判断大小不要直接相减,如果减一个负数得到的值可能会超出范围,从而返回负数
                return Ints.compare(o1.getAge(), o2.getAge());//guava提供的方法
            }
        });
        System.out.println(list);
    }
    //传递代码(lambda表达式)
    @Test
    public void java8Test() {
        Person p1 = new Person(22);
        Person p2 = new Person(23);
        Person p3 = new Person(21);
        Person p4 = new Person(20);
        List<Person> list = Lists.newArrayList(p1, p2, p3, p4);
        Collections.sort(list, (Person person1, Person person2) -> {
            return Ints.compare(person1.getAge(), person2.getAge());
        });
        System.out.println(list);
    }

    对于减少代码来说,效果并不是很明显,但是他有一个令人惊喜的事情是他并没有创建一个匿名内部类,而是将方法传了过去,让比较器通过这个方法来比较。不过上述表达式是最完整的一种方式,

    也是表达最清楚的方式,但却是写起来比较麻烦的方式。因为Comparator只有一个抽象方法(这种接口叫做函数式接口,这种函数式接口,方便了lambda表达式的简化),并且List的类型已经确定,编译器是可以通过上下午判断出传入的类型的,所以可以省略掉显示制定类型,并且只有一行代码,{}和return也是可以省略掉的。

    Collections.sort(list, (person1, person2) -> Ints.compare(person1.getAge(), person2.getAge()));
     
    优化完的代码,看起来会觉得很奇怪,但是比匿名内部类代码少的多,当然用idea来写代码,用匿名内部类是非常快的写出来的,但是以后的阅读,lambda还是比匿名内部类要好。

     

  • 相关阅读:
    lda spark 代码官方文档
    4.17 斐波那契数列 K维斐波那契数列 矩阵乘法 构造
    CF R 635 div1 C Kaavi and Magic Spell 区间dp
    CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针
    luogu P5043 【模板】树同构 hash 最小表示法
    CF R 633 div 1 1338 C. Perfect Triples 打表找规律
    CF 633 div1 1338 B. Edge Weight Assignment 构造
    4.15 省选模拟赛 哈密顿回路 折半搜索 双指针
    4.15 省选模拟赛 编码 trie树 前缀和优化建图 2-sat
    4.13 省选模拟赛 守卫 点分治 虚树
  • 原文地址:https://www.cnblogs.com/zhandouBlog/p/9383228.html
Copyright © 2020-2023  润新知