问题引入
今天在学习过程中写了这样一段代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20interface 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对象。