Java中的Lambda表达式
Lambda表达式在C++、Java等多种语言中都存在。但是在使用上都存在细微区别。
在Java中,Lambda允许使用更简洁的当时表示匿名函数,Lambda表达式的存在能够让代码更加的简洁、清晰。
Lambda表达式的定义
Lambda 表达式是 Java 中用于“实现函数式接口唯一抽象方法”的一种简洁写法。在实际写作的过程中,我们可以在不创建新的类的情况下,编写出简洁、可复用的代码。
1 | (形参)->表达体 |
形参:Lambda表达式的参数,可以有多个或没有。
→:箭头符号,分割了参数列表和Lambda体。
表达体:是一段可执行的代码块,通常是一个表达式,或者一组语句
Lambda表达式的重要性
如果没有Lambda表达式,我们需要实现一个接口的方法要这样写:
1 | Runnable r = new Runable(){ |
这样写,只是为了实现一个run()方法却写了一堆代码。
当Lambda表达式后,我们的写法变成了:
1 | Runnable r = () -> System.out.println("你好"); |
由此我们可以看出,Lambda表达式的出现,是为了代替“实现一个方法的匿名内部类”。
Lambda表达式的使用规范
函数式接口:只包含一个抽象方法的接口
示例:
1 | @FunctionalInterface |
反例:
1 | interface Bad { |
❗️Java 的 Lambda 只能用于接口,不能用于类或抽象类。
Lambda 表达式的语法形式
- 无参无返回值
1 | () -> { ... } |
- 有一个参
1 | x -> x * 2 |
- 有两个参
1 | (a, b) -> a + b |
Lambda 表达式的本质
在Java的流处理中,我们常用filter方法,filter方法里就可以写Lambda表达式:
1 | stream.filter(x -> x > 0); |
等价于:
1 | stream.filter(new Predicate<Integer>() { |