lambda表达式 主要用于简化代码,代码少,则bug少。要想无bug,除非不写代码!
lambda表达式 只能用于 函数式接口,
函数式接口定义:只有一个抽象方法。如下图,
备注:对于 函数式接口 可以 用 @FunctionalInterface 注解来声明这是一个函数式接口,该注解声明后,再增加抽象方法就会冒红了
简单示例
我们先来 使用匿名内部类的方式 来创建一个线程
@Test
public void test5() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我执行了");
}
});
t.start();
}
再来优化 用 lambda 表达式来实现
@Test
public void test5() {
//使用lambda表达式后的代码如下
Thread t1 = new Thread(() -> System.out.println("我也执行了"));
t1.start();
}
代码是不是 清爽多了!
下面来解释下 lambda 表达式
"->" java8中引入的一个新的操作符 ,称为 箭头操作符 或 Lambda 操作符
箭头左侧: 参数列表
箭头右侧:执行的代码
语法格式:
//无参数
()-> System.out.println("我执行了");
//有参数
//可以不写参数类型,不写的话 编译器会进行 “类型推导” 推导出具体的类型。
(str)-> System.out.println(str);
//写的话就是
(String str)-> System.out.println(str);
//如果只有一个参数,可以省略()
str-> System.out.println(str);
多行代码: 用大括号包裹起来
(str)-> {
str +="111";
System.out.println(str);
}
有返回值: 直接return
(str)-> {
str +="111";
System.out.println(str);
return str;
}
当有返回值并且只有单条代码的时候,可以不写 return
(str)-> str += "111";