lambda表达式
Lambda表达式是 简洁的表示可传递的匿名函数的一种方式。它没有名称,但它有参数列表,函数主体,返回类型,可能还有一个可以抛出的异常列表。
语法规则
引入了一个新的操作符“->”,该操作符在很多资料中,称为箭头操作符,或者lambda操作符;
左侧:lambda表达式的参数列表
右侧:lambda表达式中所需要执行的功能,即lambda函数体
- 无参数,无返回值的用法 :() -> System.out.println("hello lambda");
@Test
public void test1() {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("hello runnable");
}
};
r.run();
Runnable r1 = () -> System.out.println("hello lambda");
r1.run();
}
- 有一个参数,无返回值的用法: (x) -> System.out.println(x); 或者 x -> System.out.println(x); 一个参数,可以省略参数的小括号
@Test
public void test2(){
Consumer<String> con = (x) -> System.out.println(x);
con.accept("有一个参数,无返回值的用法(Consumer函数式接口)");
}
- 有两个参数,有返回值的:(x, y) -> x + y
public void test3() {
BinaryOperator<Integer> binary = (x, y) -> x + y;
System.out.println(binary.apply(1, 2));// 3
}
- lambda表达式中,多行语句,分别在无返回值和有返回值的抽象类中的用法
@Test
public void test4() {
// 无返回值lambda函数体中用法
Runnable r1 = () -> {
System.out.println("hello lambda1");
System.out.println("hello lambda2");
System.out.println("hello lambda3");
};
r1.run();
// 有返回值lambda函数体中用法
BinaryOperator<Integer> binary = (x, y) -> {
int a = x * 2;
int b = y + 2;
return a + b;
};
System.out.println(binary.apply(1, 2));// 6
}
lambda的类型推断:在lambda中的参数列表,可以不用写参数的类型,跟java7中 new ArrayList<>(); 不需要指定泛型类型,这样的<>棱形操作符一样,根据上下文做类型的推断。
函数式接口
接口中只有一个抽象方法的接口,称为函数式接口;可以使用@FunctionalInterface注解修饰,对该接口做检查;如果接口里,有多个抽象方法,使用该注解,会有语法错误。
网友评论