lambda表达式

lambda是什么:

  • lambda是Java8的重要新特征,使用 Lambda 表达式可以使代码变的更加简洁紧凑,同时lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
  • 相较于Java7匿名内部类,lambda不仅仅是语法糖而已,经反编译后可知:匿名内部类会创建一个内部类对象,而lambda表达式会被封装为主类的私有方法。
  • lambda表达式会省略方法名或省略方法名与接口名(仅能取代函数接口:一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。),即:
//此处省略Runable接口与run方法名称
new
Thread( () -> { System.out.print("Hello"); } ).start();

语法特征:

  • (parameters) -> expression(parameters) ->{ statements; }
  • 以下是lambda表达式的重要特征:
  1. 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  2. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  3. 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  4. 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值,即:
Function f1=(a)-> a.toString();
//或
Function f1=(a)-> {return a.toString();};
  • 类名::方法名

    注意是方法名哦,后面没有括号“()”。为啥不要括号,因为这样的是式子并不代表一定会调用这个方法。这种式子一般是用作Lambda表达式,Lambda有所谓懒加载嘛,不要括号就是说,看情况调用方法。

参考:

https://www.runoob.com/java/java8-functional-interfaces.html

https://objcoding.com/2019/03/04/lambda/

https://blog.csdn.net/lsmsrc/article/details/41747159

后续:lambda与Collections、stream(待整理)

原文地址:https://www.cnblogs.com/jixiegongdi/p/14005802.html