


一、介绍
java8中一个非常重要的特性就是lambda表达式,我们可以把它看成是一种闭包,它允许把函数当做参数来使用,是面向函数式编程的思想,一定程度上可以使代码看起来更加简洁。例如以前我们使用匿名内部类来实现代码:

使用lambda则更加简洁:


(paramters)-> expression;
或者
(paramters)-> {statements;}
lambad表达式被 箭头操作符->分为两大部分;
左侧部分:给出lambda内容体需要用到的所有参数;
右侧部分:lambda内容体,即lambda表达式要执行的功能;

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
示例:


方法引用实际上是Lambda表达式的一种语法糖。我可以将方法引用看作是一个函数指针。
方法引用有很多种,它们的语法如下:
静态方法引用:ClassName::methodName
实例上的实例方法引用:instanceReference::methodName
超类上的实例方法引用:super::methodName
类型上的实例方法引用:ClassName::methodName
构造方法引用:Class::new
数组构造方法引用:TypeName[]::new
示例:
lamdba写法:
@Test
voidtest1(){
Consumer<String>con = x -> System.out.println(x);
}
方法引用写法:
@Test
voidtest2(){
PrintStreamout = System.out;
Consumer<String>con = out::println;
}

lambda表达式的局部变量可以不用声明为final,但是必须不可被后面的代码修改(即隐性的具有final的语义)

在Lambda表达式当中不允许声明一个与局部变量同名的参数或者局部变量。


Java允许我们使用Lambda表达式替代传统的匿名类创建使用方式,当该参数接口是含有单个函数的函数式接口,我们就可以使用Lambda表达式去替代匿名类的使用方式。这就是Lambda的强大之处。极大缩短代码行数,同时大大提高代码的易读性,以上是笔者对java8新特性-Lambda表达式个人理解,欢迎大家一起共同探讨。



努力做一个可爱的人
微信 | justdoit2019syy





