Java8的lambda表达式学习记录—lambda语法
一,lambda表达式的语法
- 无参无返回值
//无参无返回值,括号里为空 () -> System.out.println("gogo");
@Test
public void test1() {
int num = 0;//jdk1.7之前,必须是final的,在匿名内部类中调用,不能修改它的值,现在不用加final了,但是不能修改
Runnable r1 = new Runnable() {//传统写法
@Override
public void run() {
System.out.println("gogo" + num);//这个地方写num++会报错
}
};
Runnable r2 = () -> System.out.println("GOGO");//()代表方法时无参的
}
- 有参数,无返回值
//有一个参数,无返回值 (e) -> System.out.println(e);
//若方法只有一个参数,参数的小括号可以省略 e -> System.out.println(e);
@Test
public void test2(){
Consumer c1 = (e) -> System.out.println(e);
Consumer c2 = e -> System.out.println(e);
}
- 有两个以上的参数,有返回值,并且lambda体中含有多条语句
@Test
public void test3(){
Comparator<Integer> com = (x, y) -> {
System.out.println("lambda表达式中含有多条语句的,要用大括号括起来!!!");
return Integer.compare(x, y);
};
}
- Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器可以通过上下文推断出类型,称为类型推断
- Lambda表达式需要"函数式"接口的支持,如果接口中只有一个抽象方法,那么就将这个接口称之为函数式接口,可以使用
@FunctionInterface
注解修饰,用来检查该接口是否是函数式接口