一.Lamdba 表达式的基础语法
Lamdba是一个匿名函数,Lamdba表达式是一段可以传递的代码。
Java8 中引用了一个新的操作符,->
该操作符成为箭头操作符或者是Lamdba操作符,箭头操作符将Lamdba表达式拆分成两部分:参数列表 -> 执行的功能
二.Lambda表达式的重要特征
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
三.Lamdba表达式的实例
1.无参数,无返回值类型
@Test public void test1() { Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello World!"); } }; runnable.run(); //等价于 Runnable runnable1 = () -> System.out.println("Hello World!"); runnable1.run(); }
2.有一个参数,并且无返回值(只有一个参数,小括号可以省略)
@Test public void test2(){ Consumer consumer1 = new Consumer() { @Override public void accept(Object o) { System.out.println(o); } }; consumer1.accept("Hello World"); //等价于 Consumer consumer2 = item -> System.out.println(item); consumer2.accept("Hello World"); }
3.有两个以上的参数,有返回值(一条语句可以省略return 和大括号)
@Test public void test3(){ Comparator<Integer> comparator = (x, y) -> Integer.compare(x,y); }
四.Lamdba表达式需要「函数式接口」的支持
函数式接口:接口中只有一个抽象方法的接口,成为函数式接口,可以用注解@FunctionalInterface修饰来检查是否是函数式接口
import org.junit.Test;@FunctionalInterfaceinterface DemoInterface { int value(int num); }public class Lambda { @Test public void test() { int value = operation(10,num -> num * 2); System.out.println(value); } public int operation(Integer x, DemoInterface demo){ return demo.value(x); } }
注意:
lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在lambda 内部修改定义在域外的局部变量,否则会编译错误。
作者:Mr_欢先生
链接:https://www.jianshu.com/p/65880979c763
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦