首先看下面一段代码:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.out.println("button clicked");
}
}
);
这实际上一个代码即数据的例子,我们给按钮传递了一个代表某种行为的对象。
设计匿名内部类的目的,就是方便java程序员将代码作为数据传递。不过匿名内部类还是不够简便,为了调用一行重要的逻辑代码,不得不加上四行冗繁的样板代码。并且这些代码还相当难读,因为它并没有清晰的表达程序员的意图:我们不想传入对象,只想传入行为。在Java8中,上述代码可以写成一个lambda表达式:
button.addActionListener(event->System.out.println("button clicked"));
函数接口
函数接口是只有一个抽象方法的接口用作Lambda表达式的类型。
Java中重要的函数接口:
Predicate<T> , Consumer<T> , Function<T,R> ,Supplier<T> , UnaryOPerator<T> , BinaryOperator<T>
Predicate<T>:
public interface Predicate<T>{
boolean test(T t);
}
总结:
Lambda 表达式是一个匿名方法,将行为像数据一样传递。
Lambda表达式常见的结构:BinayOPerator<Integer> add = (x,y) -> x+y;
函数接口指仅具有单个抽象方法的接口,用来表示Lambda表达式的类型。