标签:bsp 输出 err 匿名内部类 sum new 优点 掌握 需要
Lambda 允许我们将函数当成参数传递给某个方法。
关于Lambda表达式的“好处”或是“优点”,很多技术相关网站上的文章或书籍都有提到:”使用 Lambda 表达式可以使代码变的更加简洁紧凑。“,相对来说”缺点“的话,
就是有点不易读,毕竟做java的大多数是面向对象编程,熟练之后,可能渐渐会掌握读Lambda代码的窍门吧。
?lambda 表达式的语法格式如下:
(parameters) -> expression 或 (parameters) ->{ statements; }
?lambda表达式的特征:
?工程结构
?自定义接口Operation.java
1 package study_lambda; 2 3 public interface Operation { 4 5 /** 两个数的四则运算操作 */ 6 int operate(int a, int b); 7 }
?自定义接口ShowMessage.java
1 package study_lambda; 2 3 public interface ShowMessage { 4 5 /** 输出信息 */ 6 String show(String message); 7 }
?测试类
1 package study_lambda; 2 3 public class Client { 4 5 /** 6 * 主要测试内容: 7 * 1.利用Lambda表达式,实现接口的实例化(注意:自定义接口中只能有一个方法)。 8 * 2.将上记1.实例化后的接口的实例作为方法的参数,传递给方法体。 9 * 3.直接利用上记1.实例化后的接口的实例,调用接口的方法。 10 * 4.学习Lambda表达式的一般写法。 11 * 12 * @param args 13 */ 14 15 public static void main(String[] args) { 16 17 // ################# 1.利用Lambda表达式,实现接口的实例化(注意:自定义接口中只能有一个方法)。 18 // 实现Operation接口的operate方法,模拟加法操作 19 Operation addition = (int a, int b) -> a + b; // 类型声明 20 21 // 实现Operation接口的operate方法,模拟减法操作 22 Operation subtraction = (a, b) -> a - b; // 不用类型声明 23 24 // 实现Operation接口的operate方法,模拟乘法操作 25 Operation multiplication = (int a, int b) -> { 26 return a * b; 27 }; // 大括号中的处理语句(显式返回return) 28 29 // 实现Operation接口的operate方法,模拟除法操作 30 Operation division1 = (int a, int b) -> a / b; // 没有大括号且仅一条处理语句(省略返回return) 31 32 // 实现Operation接口的operate方法: 33 // 1.输出:"第一个参数是:" + 第一个参数 34 // 2.输出:"第二个参数是:" + 第二个参数 35 // 3.返回两个参数相除的结果 36 Operation division2 = (int a, int b) -> { 37 System.out.println("第一个参数是:" + a); 38 System.out.println("第二个参数是:" + b); 39 return a / b; 40 }; 41 42 // ################# 2.将上记自定义接口的实例作为方法的参数,传递给方法体。 43 System.out.println("10 + 5 = " + operate(10, 5, addition)); 44 System.out.println("10 - 5 = " + operate(10, 5, subtraction)); 45 System.out.println("10 x 5 = " + operate(10, 5, multiplication)); 46 System.out.println("10 / 5 = " + operate(10, 5, division1)); 47 48 // ################# 3.直接利用上记1.实例化后的接口的实例,调用接口的方法。 49 System.out.println("10 / 5 = " + division2.operate(10, 5)); 50 } 51 52 public static int operate(int a, int b, Operation operation) { 53 return operation.operate(a, b); 54 } 55 }
上记代码的执行结果:
在正式说明lambda表达式与变量作用域前,我们先看下lambda表达式一个作用:
就是可以简化末些匿名内部类的写法。
注意:并不是取代所有匿名内部类的写法,只能用来取代函数接口(Functional Interface)的简写
例如:
?java8以前的写法
// 匿名内部类开启线程 new Thread(new Runnable(){// 接口名 @Override public void run(){// 方法名 System.out.println("Thread run()"); } }).start();
?java8Lambda的写法
// java8Lambda表达式开启线程 new Thread( () -> System.out.println("Thread run()")// 省略接口名和方法名 ).start();
Lambda表达式和匿名内部类一样,可以引用外部的局部变量,但注意一下几点:
代码例:
编译错误:Lambda expression‘s parameter str cannot redeclare another local variable defined in an enclosing scope.
编译错误:
定义:只提供一个方法的普通接口。
java8之前JDK提供的函数式接口
java8提供的新函数式接口
以及上边代码中自定义的函数式接口
标签:bsp 输出 err 匿名内部类 sum new 优点 掌握 需要
原文地址:https://www.cnblogs.com/yubx/p/12491603.html