一、Java8新特性简介
- 速度更快
- 代码更少(Lambda表达式)
- 强大的Stream API
- 便于并行
- 最大化减少空指针异常:Optional
- Nashorn引擎,允许在JVM上运行JS应用
二、Lambda表达式
import org.junit.Test;
import java.util.Comparator;
public class LambdaTest {
@Test
public void test1()
{
Runnable r1=new Runnable() {
@Override
public void run() {
System.out.println("test");
}
};
r1.run();
Runnable r2=()-> {System.out.println("test")};
r2.run();
}
@Test
public void test2()
{
Comparator<Integer> com1=new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
};
int compare1= com1.compare(12, 21);
System.out.println(compare1);
Comparator<Integer> com2=(o1,o2)->Integer.compare(o1,o2);
int compare2=com2.compare(32,21);
System.out.println(compare2);
//方法引用
Comparator<Integer> com3=Integer::compare;
int compare3=com3.compare(32,21);
System.out.println(compare3);
}
}
Comparator<Integer> com2=(o1,o2)->Integer.compare(o1,o2);
左边:形参列表(接口中的抽象方法的形参列表)
右边:lambda体 (重写的抽象方法的方法体)
- 无参,无返回值
Runnable r2=()-> {System.out.println(“test”)} (一条语句大括号可以省略) - Lambda需要一个参数,但没有返回值
- 数据类型可以省略,因为可由编译器推断得出,称为类型推断
- 多条执行语句 且可以有返回值(return和大括号)
- Lambda只有一条语句,return与大括号若有,都可以省略
Lambda表达式的本质
作为函数式接口的实例
如果一个接口中,只声明了一个抽象方法,则此接口就称为函数式接口
@FunctionInterface注解
Lambda表达式就是一个函数式接口的实例