一.例子
Lambda表达式的本质只是一个"语法糖",使你可以使用更少的代码来实现同样的功能。
public static void main(String[] args){
fun(() -> System.out.println("此处为Lamda表达式"));
}
二.Lamda表达式的使用形式
只关心 参数 方法主体
1.方法主体为一个表达式 {params} -> expression
2.方法主体为一行执行代码 {params} -> statement
3.方法主体需要多行代码 {params} -> { statement }
三.Lamda表达式的使用
示例:
无参数: () -> 6
一个参数: x -> 6*6
两个参数: (x, y) -> x+y
int型: (int x, int y) -> x + y
对象: (String str) -> System.out.println(str)
多条语句,有返回值:
(s) -> {
System.out.println("Lamda");
return "def";
}
补充:
1.一个参数可以不写括号
2.方法主体只有一条语句,return和{}都可以省略不写
3.参数列表的数据类型可以不写
4.方法主体有多条语句要用{}
四.方法引用
相当于为方法定义了别名
1.简单例子
interface IMessage<T>{
public T upper();
}
public class Test{
public static void main(String[] args){
IMessage<String> msg = "aaa" :: toUpperCase; // (1)
String str = msg.upper(); // (2)
System.out.println(str);
}
}
(1)
"aaa" 是String类的实例化对象
"aaa" :: toUpperCase 相当于为 toUpperCase() 方法定义了别名
(2)
msg.upper() 相当于 "aaa".toUpperCase()
2.四种操作形式
1.引用 静态 方法 类名称 :: static方法名称
2.引用 某个对象 的方法 实例化对象 :: 普通方法
3.引用 特定类型 的方法 特定类 :: 普通方法
4.应用 构造 方法 类名称 :: new
五.内建函数式接口
为了简化开发者的定义以及操作的统一
1.功能型接口(Function) 接收一个参数 返回一个处理结果
2.消费型接口(Consumer) 接收数据 不返回
3.供给型接口(Supplier) 不接收参数 可以返回结果
4.断言型接口(Predicate) 判断操作使用
<更多的相关知识及解释这里就不展开说明了>
六.Lamda与匿名内部类比较
优点:简洁
缺点:Lamda对应的接口只能有一个方法(匿名内部类对应的接口可以有多个方法)