Java:Lambda表达式

问题引入

今天在学习过程中写了这样一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
interface Game { boolean move(); }
interface GameFactory { Game getGame(); }

class Checkers implements Game {
private int moves = 0;
private static final int MOVES =3;

@Override
public boolean move() {
System.out.println("Checkers move " + moves);
return ++moves != MOVES;
}

public static GameFactory factory = new GameFactory() {
@Override
public Game getGame() {
return new Checkers();
}
};
}

此时编译器在new GameFactory()处提醒 Anonymous new GameFactory() can be replaced with lambda。点击后整个方法块被public static GameFactory factory = () -> new Checkers();所替代,这就是lambda表达式。

Lambda表达式

Lambda表达式,也可称为闭包,它是推动Java 8 发布的最重要新特性。
Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda表达式可以是代码变的更加简洁紧凑。

语法

Lambda表达式的语法格式如下:

1
2
3
(parameters) -> expression

(parameters) ->{ statements; }

根据语法回到之前的例子:public static GameFactory factory = () -> new Checkers();表示的就是不需要参数,返回值为一个Checkers对象。