Java8 λ表达式学习整理

个人理解:λ表达式是一个匿名方法的实现,它的目标对象是一个(可以匹配到多个)函数式接口(不算上Object类中的方法只有一个自己的抽象方法的接口即函数式接口),这里的匿名方法是指函数式接口中唯一抽象方法。

即可以将λ表达式赋值给一个函数式接口,所以当方法的形参是一个函数式接口时可以通过λ表达式替换达到简化效果,而Java8以前都是采用内部类的方式

λ表达式使用场景

1、替换以前广泛使用的内部匿名类,如上面提到的Runable接口在Java8中就是一个典型的函数式接口,在新建一个线程时可有如下写法:

//之前的写法
Thread oldThread = new Thread( new Runnable () {
        @Override
        public void run() {
            System.out.println("This is from an anonymous class.");
        }
    } );
   //采用λ表达式的写法
    Thread newThread = new Thread( () -> {
        System.out.println("This is from an anonymous method (lambda exp).");
    } );

2、集合类批处理操作

集合类批处理操作是指实现集合类的内部迭代,即交由类库处理而非自己编写迭代/遍历代码

forEach是jdk8中Iterable新增的方法被关键字default修饰,Collection、List、Set直接或者间接实现了Iterable也就获得该默认实现的forEach方法,Map是在自己的接口里面加入了default类型的forEach,因为Map是key:value键值对形式的所以你会看到forEach方法接收的函数式接口类型是不一样的

推荐阅读:http://swiftlet.net/archives/3331

                 https://blog.csdn.net/aa8568849/article/details/52650452

                 https://segmentfault.com/a/1190000012213954

                 https://www.cnblogs.com/yulinfeng/p/8452379.html

                 https://blog.csdn.net/yangjiachang1203/article/details/52619795

                 https://blog.csdn.net/zixiao217/article/details/70196751

                 https://blog.csdn.net/dounine/article/details/53357914

猜你喜欢

转载自blog.csdn.net/dyr_1203/article/details/85006048