button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被点击");
}
});
例 2-2 使用Lambda表达式将行为和按钮单击进行关联
button.addActionListener(e -> System.out.println("按钮被点击"));
2.2 如何辨别Lambda表达式
例2-3 编写Lambda表达式的不同形式
Runnable thread01 = () -> System.out.println("Hello World");
ActionListener listener = event -> System.out.println("按钮被点击");
Runnable thread02 = () -> {
System.out.println("Hello");
System.out.println(" World");
};
BinaryOperator add01 = (x, y) -> x + y;
BinaryOperator add02 = (Long x, Long y) -> x + y;
例2-4 等号右边的代码并没有声明类型,系统根据上下文推断出类型信息
final String[] array = {"hello", "world"};
2.3 引用值,而不是变量
例2-5 匿名内部类中使用final局部变量
final String name = getUserName();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hi " + name);
}
});
例2.6 Lambda表达式中引用既成事实上的final变量
final String name = getUserName();
button.addActionListener(event -> System.out.println("hi " + name));
例2.7 未使用既成事实上的final变量,导致无法通过编译
final String name = getUserName();
name = formatUserName(name);
button.addActionListener(event -> System.out.println("hi " + name));
2.4 函数接口
例2-8 ActionListener接口:接受ActionEvent类型的参数,返回空
public interface ActionListener extends EventListener {
public void actionPerformed(ActionEvent e);
}
表2-1 Java中重要的函数接口
| 接口 | 参数 | 返回类型 | 实例 |
|---|---|---|---|
| Predicate | T | boolean | 这种唱片已经发行了吗 |
| Consumer | T | void | 输出一个值 |
| Function | T | R | 获得Artist对象的名字 |
| Supplier | None | T | 工厂方法 |
| UnaryOperator | T | T | 逻辑非(!) |
| BinaryOperato | (T, T) | T | 求两个数的乘积(*) |
Map2-10 使用菱形操作符,根据方法签名做推断oldWordCounts = new HashMap (); Map diamondWordCounts = new HashMap<>();
useHashMap(new HashMap<>()); ... private void useHashMap(HashMap2-11 类型推断value);
Predicate2-12 Predicate接口的源码,接受一个对象,返回一个布尔值atLeast5 = x -> x > 5;
public interface Predicate2-13 略显复杂的类型推断{ boolean test(T t); }
BinaryOperator2-14 没有泛型,代码则通不过编译addLongs = (x, y) -> x + y;
BinaryOperator addLongs = (x, y) -> x + y;
注意:运算符 ‘+’ 不能应用于 ‘java.lang.Object’、‘java.lang.Object’
2.6 要点回顾Lambda表达式是一个匿名方法,将行为像数据一样进行传递。Lambda表达式的常见结构: BinaryOperator add = (x, y) -> x + y。函数接口指仅具有单个抽象方法的接口,用来表示Lambda表达式的类型。



