lambda表达式简述

Posted chenloveslife

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda表达式简述相关的知识,希望对你有一定的参考价值。

一、什么是lambda表达式

  lambda表达式的类型是一个接口类型,而lambda表达式本身的代码就是接口的实现,即lambda表达式是一个接口的实现。对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式,这种接口又被称为函数式接口,我们可以在该接口前声明@FunctionalInterface进行注解,这样就无法添加新的接口方法。lambda表达式又被称作匿名函数,也称闭包, 和匿名内部类类似,不过比匿名内部类更为简洁,在实现事件监听和回调,往往会用lambda表达式代替匿名内部类。

二、lambda表达式的用途

  1. lambda表达式可以让代码变得十分简洁

    我们知道通常实现接口是通过创建一个类并实现接口,然后通过实例化该类创建对象并调用接口的方法,而通过lambda表达式直接传递对象则极为方便。并且,由于lambda表达式可以直接赋值给一个变量,这样就可以直接把表达式作为参数传给特定方法,而传统的则必须实现接口的定义才能传递。

(图片转自:https://www.zhihu.com/question/20125256)

技术分享图片

  2. 可以延迟执行(deferred execution)。

    如果想要立即执行代码,这种情况是无需使用lambda表达式中,而是希望以后多次执行代码,在适当位置执行代码(Comparator),发生某种情况执行代码(event)。而要使用某些lambda表达式就得选择一个函数式接口,有常用函数式接口供选择。

            java.lang.Runnable

            java.util.concurrent.Callable

            java.security.PrivilegedAction

            java.util.Comparator

            java.io.FileFilter

            java.nio.file.PathMatcher 

            java.lang.reflect.InvocationHandler

            java.beans.PropertyChangeListener

            java.awt.event.ActionListener  

            javax.swing.event.ChangeListener

 

1         public interface IntConsumer {
2             void accept(int value);
3         }
4         public static void repeat(int n, i ->     
5             System.out.println("Countdown:" + (9 - i))) {   //IntConsumer action = i -> System.out.println("Countdown:" + (9 - i))
6             for (int i = 0; i < n; i++) {
7                 action.accept(i);
8             }
9          }

三、lambda表达式格式

(图片转自:https://www.zhihu.com/question/20125256)

技术分享图片

 

以上是关于lambda表达式简述的主要内容,如果未能解决你的问题,请参考以下文章

Lambda演算 - 简述Y组合子的作用

IntelliJ:求值lambda表达式在调试时引发编译错误

pytho lambda表达式

使用 savedInstanceState 保存和恢复 Kotlin lambda

Java8--Lambda表达式

lambda表达式由啥组成