lambda表达式笔记

2019-09-08 09:55:24来源:博客园 阅读 ()

lambda表达式笔记

前几天一位好友分享了一篇文章,其中讲到了lambda表达式,正好最近看了一些内容,就做做笔记吧...

lambda表达式服务于函数式接口,如果需要一个函数式接口的对象时,就可以用lambda表达式代替

什么是函数式接口?

1.最主要的一点是只包含一个抽象方法的接口(Object类的方法不算啊)
2.带有@FunctionalInterface注解的一定是函数式接口,但是不代表没有该注解就表示不是,只要是一个接口,有且只有一个抽象方法,那么就是函数式接口,注解配合编译器可以很好的辅助,我们在自定义函数式接口的时候,也会更加直观,有助于代码的可读性

几个简单的例子

Arrays.sort方法需要一个实现了Comparator接口的实例,正常情况下,我们需要创建一个实例,然后实现Comparator接口,然后将该实例传入Arrays.sort方法中,还是比较繁琐的,但是使用lambda表达式就可以非常简化

编译器如果能推导出参数类型,小括号中的参数类型是可以省略的

        String[] array = new String[3];
        array[0] = "ccc";
        array[1] = "bb";
        array[2] = "a";
        System.out.println(array[0]);// 输出ccc
        Arrays.sort(array, (first, second) -> first.length() - second.length());
        System.out.println(array[0]);// 输出a

对于逻辑比较复杂的代码,逻辑处理部分可以使用{}包起来

        Timer t = new Timer(1000, event -> {
            System.out.println("action");
            System.out.println("listener");
        });
        t.start();

表达式也是可以当作一个参数传递的

        String[] array = new String[3];
        array[0] = "ccc";
        array[1] = "bb";
        array[2] = "a";
        System.out.println(array[0]);
        Comparator<String> comp = (first, second) -> first.length() - second.length();
        Arrays.sort(array, comp);
        System.out.println(array[0]);

如果没有入参的时候,小括号不能省略

        Thread thread = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                System.out.println(i);
            }
        });
        thread.start();

现在工作主要是用Scala语言,Scala在语法等方面对比Java来讲更加函数化,遍历、排序、过滤等操作甚至来讲只用一行代码就可以完成

但是lambda作为Java8的一个大更新,所以还是有必要学习一下新特性的


原文链接:https://www.cnblogs.com/pengx/p/11485912.html
如有疑问请与原作者联系

标签:接口方法函数实现COM使用

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:什么是分布式事务以及有哪些解决方案?

下一篇:一起MySQL时间戳精度引发的血案