第2章 Lambda表达式

2.1 第一个Lambda表达式

例2-1 使用匿名内部类将行为和按钮单击进行关联
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<Long> add01 = (x, y) -> x + y;
BinaryOperator<Long> 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中重要的函数接口
接口参数返回类型实例
PredicateTboolean这种唱片已经发行了吗
ConsumerTvoid输出一个值
Function<T, R>TR获得Artist对象的名字
SupplierNoneT工厂方法
UnaryOperatorTT逻辑非(!)
BinaryOperato(T, T)T求两个数的乘积(*)

2.5 类型推断

2-9 使用菱形操作符,根据变量类型做推断
Map<String, Integer> oldWordCounts = new HashMap<String, Integer>();
Map<String, Integer> diamondWordCounts = new HashMap<>();
2-10 使用菱形操作符,根据方法签名做推断
useHashMap(new HashMap<>());
...
private void useHashMap(HashMap<String, String> value);
2-11 类型推断
Predicate<Integer> atLeast5 = x -> x > 5;
2-12 Predicate接口的源码,接受一个对象,返回一个布尔值
public interface Predicate<T> {
  boolean test(T t);
}
2-13 略显复杂的类型推断
BinaryOperator<Long> addLongs = (x, y) -> x + y;
2-14 没有泛型,代码则通不过编译
BinaryOperator addLongs = (x, y) -> x + y;

注意:运算符 ‘+’ 不能应用于 ‘java.lang.Object’、‘java.lang.Object’

2.6 要点回顾

  • Lambda表达式是一个匿名方法,将行为像数据一样进行传递
  • Lambda表达式的常见结构BinaryOperator add = (x, y) -> x + y
  • 函数接口指仅具有单个抽象方法的接口,用来表示Lambda表达式的类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值