Java 8 Lambda 表达式是一个匿名函数。匿名函数是指没有名字且不与任何类绑定的函数。
二、为什么要使用 Lambda 表达式?
使用 Lambda 表达式可以实现使用简洁的代码来创建函数式接口的实例,这样就避免了使用匿名内部类繁琐的写法。
下面我们将学习下Java 8 Lambda 表达式实现示例。
三、Java Lambda 表达式语法
Lambda 表达式非常简单,包含三个部分。形参列表、箭头运算符(->)和表达式(方法体)。
语法 : (parameters) -> { statements; }
与任何 java 函数一样,我们可以有任意数量的参数。我们还可以在方法体中包含任意数量的行或表达式。
例子:
// 普通函数 public static int add(int a, int b) { return a + b; }
// 等效的Java Lambda表达式示例 (a, b) -> a + b;
为了更好地理解,让我们看一下 Runnable 类的真实示例。
在 java 8 之前,对于函数式接口的实现,我们要么使用实现类,要么使用匿名内部类。 但是在 lambda 之后,我们可以有另外的做法。
// 在 java 8 之前,使用实现类来实现 public class RunnableImpl implements Runnable { @Override public void run() { System.out.println("Runnable implementation"); } } // usage:Runnable runnableObj = new RunnableImpl();
// 在 java 8 之前,使用匿名类内部类来实现 Runnable runnableObj = new Runnable() { @Override public void run() { System.out.println("Anonymous implementation"); } };
换成等效的 lambda 表达式的实现是:
Runnable runnableObj = () -> System.out.println("Lambda implementation");
关于 Java lambda 表达式要知道的知识点:
- Java 8 lambda 表达式可以有零个、一个或 多个参数 。eg:
() -> 10; a -> a * a; (a, b) -> a + b;
- 对于零个或多个参数,小括号是 必须的 。eg:
() -> 10; (a, b) -> a + b;
- 对于一个参数,小括号是 可选的 。eg:
a -> a * a;
- 参数类型可以声明或由程序 自动检测 。eg:
(int a, int b) -> a + b; OR (a, b) -> a + b;
- 如果我们要声明参数类型,小括号是 必须的 。eg:
(int a) -> a * a;
- 如果方法体只有一条语句,大括号是 可选的 。eg:
a -> a * a; OR a -> {return a * a;};
- 如果方法体只有一条语句,return关键字是 可选的 ,Lambda表达式会自动返回这条语句的值。eg:
a -> a *