悟道子
2019-12-02 11:49:59
Java 8新特性——Lambda表达式
Lambda允许把函数作为一个方法的参数使用,由编译器推断并转换为常规的代码,实现同样的功能代码更简洁。
语法:
(parameters) -> expression
(parameters) -> { statements;}
重要特征:
1、不需要声明参数类型,编译器可以统一识别参数值
例如:()->5 不需要参数,返回值5
(x,y) -> x - y 没有声明参数类型,返回x - y的差值
2、当有一个参数时无需定义括号,当有两个参数时必须定义括号
例如:x -> 2 * x 一个参数,不用定义括号
(x,y) -> x - y 两个参数,必须有括号
3、主体包含一个语句,就不需要大括号
4、如果主体只有一个表达式返回值则编译器会自动返回值
public class Java8LambdaDemo { public static void main(String args[]) { Java8LambdaDemo java8LambdaDemo = new Java8LambdaDemo(); //类型声明 Calculator addtion = (int a,int b) ->a+b; //不用类型声明 Calculator subtraction = (a,b) -> a-b; //大括号的返回语句 Calculator multiplication = (int a,int b) -> {return a*b; }; //没有大括号的返回语句 Calculator division = (int a,int b) -> a/b; System.out.println("100+50="+java8LambdaDemo.operate(100,50,addtion)); System.out.println("100-50="+java8LambdaDemo.operate(100,50,subtraction)); System.out.println("100*50="+java8LambdaDemo.operate(100,50,multiplication)); System.out.println("100/50="+java8LambdaDemo.operate(100,50,division)); } /** * 算数运算接口 */ interface Calculator{ int calculate(int a,int b); } /** *操作方法 */ private int operate(int a,int b,Calculator calculator){ return calculator.calculate(a,b); } }
作用域:可以在直接在Lambda表达式中访问外层的局部变量,但表达式内层不能修改定义在表达式外的局部变量,否则会有编译错误。lambda表达式内的局部变量不允许与外部变量重名。
public class Java8LambdaScopeDemo { public static void main(String args[]) { final String salutation = "hello "; String myName = "I am Lambda ~"; String today = "2019/12/02"; SayHello greetingService = message -> { System.out.println(salutation + message + myName); //此处修改today出现变异错误 //today = "2019/12/03"; //此处定义的局部变量会出现编译错误 //String myName = "Java"; }; greetingService.say("World ! "); } interface SayHello{ /** * 打招呼方法 * @param message */ void say(String message); } }
评论
最近浏览
80730176 LV7
6月18日
zjw1997
2022年4月30日
暂无贡献等级
sdtzwss LV12
2020年9月25日
gengwenbin
2020年9月3日
暂无贡献等级
bcli123 LV7
2020年8月26日
yzcan LV6
2020年7月31日
wangzhiming LV2
2020年7月8日
随便取个名字_哈哈 LV27
2020年6月7日
maomao852 LV12
2020年5月28日
haoayou LV8
2020年5月27日