上面是Lambda?
Lambda是一个 匿名函数,Lambda表达式是一段可以传递的代码
能做什么?
可以写出更简洁、更灵活的代码。使java语言表达能力得到 提升。
特性:
- 在Lambda表达式中不需要指定类型
- 无参、无返回值,Lambda体只需一条语句 例如:Runnable run1=()-> System.out.println("hello world!");
- 无参、有返回值,编译器可以统一识别参数值 例如: x -> 2 * x 返回2倍的x
- 一个参数时 不需要圆括号() 例如 x->2*x,但是多个参数时 需要加圆括号。例如(x,y)->x+y 返回x+y的结果
- 主体包含一条语句,不需要大括号 {} return也可以省略,多条语句用{}包裹
- 如果主体只有一个表达式返回值,则编译器会自动返回值,大括号需要指明表达式返回了一个数值
其中->被称为Lambda操作符
函数式接口 :如果接口中只有一个方法时,被称为函数式接口。
可以使用 @FunctionalInterface注解 检查接口只能有一个抽象方法。
使用Lambda表达式+函数式编程的优点:让一个接口可以实现多种操作。定义了一个接口但是不指定具体功能。通过该接口实现多种操作
函数式接口使用示例:
Fun接口类:
@FunctionalInterface
public interface Fun {
Integer account(Integer num,Integer num2);
}
FunTest测试类:
import org.junit.Test;
import static org.junit.Assert.*;
public class FunTest {
@Test
public void Testaccount() {
Integer result=operation(10,11,(num1, num2) -> num1 + num2); // 加法操作,得到10 + 11
System.out.println(result);
result=operation(10,11,(num1, num2) -> num1 * num2); // 乘法操作,得到10 * 11
System.out.println(result);
}
public Integer operation(Integer num1,Integer num2,Fun fun){
return fun.account(num1,num2);
}
}
运行结果: