Java8实战读书笔记-第3章 λ表达式

 

 

 

可以在函数式接口上使用λ表达式,函数式接口就是只定义一个抽象方法的接口(函数式接口只可以定义一个抽象接口,但是可以定义多个默认方法)。

Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例(具体说来,是函数式接口一个具体实现的实例)。

 

@FunctionalInterface表示该接口被设计成一个函数式接口

 

 

请注意,任何函数式接口都不允许抛出受检异常(checked exception)。如果你需要Lambda表达式来 抛出异常,有两种办法:定义一个自己的函数式接口,并声明受检异常,或者把Lambda包在一个 try/catch块中。

3.6 方法引用

方法引用主要有三类。

(1) 指向静态方法的方法引用(例如Integer的parseInt方法,写作Integer::parseInt)。

(2) 指向任意类型实例方法的方法引用(例如String的length方法,写作String::length)。

(3) 指向现有对象的实例方法的方法引用(假设你有一个局部变量expensiveTransaction用于存放 Transaction类型的对象,它支持实例方法getValue,那么你就可以写 expensiveTransaction::getValue)。

 

3.8复合Lambda表达式的有用方法

3.8.1比较器复合

比较器:appleList.sort(Comparator.comparing(Apple::getWeight));

逆序:appleList.sort(Comparator.comparing(Apple::getWeight).reversed());

比较器链:appleList.sort(Comparator.comparing(Apple::getWeight).reversed().thenComparing(Apple::getColor));

3.8.2谓词复合

要么是重(150克以上)的红苹果,要么是绿苹果:

Predicate redAndHeavyAppleOrGreen = redApple.and(a -> a.getWeight() > 150) .or(a -> "green".equals(a.getColor())); ←─链接Predicate的方法来构造更复杂Predicate对象

3.8.3函数复合

Function接口为此配了andThen和 compose两个默认方法,它们都会返回Function的一个实例。

 

3.10小结

Lambda表达式可以理解为一种匿名函数:它没有名称,但有参数列表、函数主体、返回类型,可能 还有一个可以抛出的异常的列表。

Lambda表达式让你可以简洁地传递代码。

函数式接口就是仅仅声明了一个抽象方法的接口。

只有在接受函数式接口的地方才可以使用Lambda表达式。

Lambda表达式允许你直接内联,为函数式接口的抽象方法提供实现,并且将整个表达式作为函数式 接口的一个实例。

Java 8自带一些常用的函数式接口,放在java.util.function包里,包括Predicate、 Function、Supplier、Consumer和BinaryOperator,如表3-2所述。

为了避免装箱操作,对Predicate和Function等通用函数式接口的原始类型特化: IntPredicate、IntToLongFunction等。

环绕执行模式(即在方法所必需的代码中间,你需要执行点儿什么操作,比如资源分配和清理)可以 配合Lambda提高灵活性和可重用性。

Lambda表达式所需要代表的类型称为目标类型。

方法引用让你重复使用现有的方法实现并直接传递它们。

Comparator、Predicate和Function等函数式接口都有几个可以用来结合Lambda表达式的默认 方法。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值