一,概念
-
**作用:**Lambda表达式用于简化匿名内部类的语法
/* 创建一个线程 */ //使用内部类 class Th extends Thread{ @Override public void run() { System.out.println("A"); } } Th t = new Th(); //创建线程对象 t.start(); //启动线程 //使用匿名内部类 new Thread(){ @Override public void run() { System.out.println("A"); } }.start(); //使用Lambda表达式写法 new Thread(() -> System.out.println("A")).start();
二,函数式接口
-
概念:只有一个待实现方法的接口,就叫做函数式接口
-
**判断:**使用
@FunctionalInterface去断言这个接口是函数式接口@FunctionalInterface interface Fly{ void fly(String name); }
三,Lambda表达式
-
使用:Lambda表达式去简化一个接口的匿名类实现方式,它只能对函数式接口起作用
(如果一个接口有多个待实现的方法,Lambda表达式就不能分辨出它现在是对接口中哪个方法进行实现)
-
"
->"操作符:即Lambda操作符,它将Lambda分为两个部分
- 左侧:指定了Lambda表达式需要的所有参数
- 右侧:指定了Lambda体,即Lambda表达式要执行的功能
-
特征
-
可选类型声明:Lambda表达式可以不用声明实现方法的参数类型
MathOperation addition = (int a, int b) -> a + b; // 类型声明 MathOperation subtraction = (a, b) -> a - b; // 不用类型声明 -
**可选的参数圆括号:**一个参数无需定义圆括号,但没有参数或者多个参数需要定义圆括号
// 不用括号 GreetingService greetService1 = message -> System.out.println("Hello " + message); // 用括号 GreetingService greetService2 = (message) -> System.out.println("Hello " + message); new Thread(() -> System.out.println("A")).start(); -
**可选的大括号:**如果主体包含了多个语句,就需要使用大括号
// 多条语句不可以省略大括号 MathOperation multiplication = (int a, int b) -> { int num = a+1; num = a + b; return a * b + num; }; // 单条语句可以省略大括号 MathOperation division = (int a, int b) -> a / b; -
**可选的返回值:**如果主体只有一个表达式则编译器会自动返回值,此外需要使用
return语句// 多条语句的Lambda表达式如果有返回值,需要使用return MathOperation multiplication = (int a, int b) -> { int num = a+1; num = a + b; return a * b + num; }; // 单条语句可以省略return MathOperation division = (int a, int b) -> a / b;
-
-
更多用法
-
为变量赋值
MathOperation subtraction = (a, b) -> a - b; -
作为return结果
MathOperation getOperation(int a, int b){ return (a1, b1) -> a+b; } -
作为数组元素
MathOperation math[] = { (a,b) -> a+b, (a,b) -> a-b, (a,b) -> a*b }; -
作为普通方法或构造方法的参数
-
-
**Lambda表达式的作用域范围:**Lambda表达式的表达体内,可以访问表达体外的变量,但无法对其进行修改操作
-
Lambda表达式的引用写法:如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用
本文介绍了Java中的Lambda表达式,包括其基本概念、如何简化匿名内部类的语法、函数式接口的定义及使用方法。同时,详细阐述了Lambda表达式的各种特性,如类型声明、参数圆括号、大括号等,并提供了具体的示例。
547

被折叠的 条评论
为什么被折叠?



