第 2 章 java.util.function 包
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
上一章讨论了 Lambda 表达式和方法引用的基本语法。其中一个基本原则是,无论哪种表达式,都有一个上下文。Lambda 表达式和方法引用总是分配给功能接口,这些接口提供了关于正在实现的单个抽象方法的信息。
虽然 Java 标准库中的许多接口只包含一个抽象方法,因此属于函数式接口,但有一个新的包专门设计用于只包含函数式接口,并在库的其余部分中重复使用。这个包叫做java.util.function 。
java.util.function 中的接口分为四类:(1) 消费者;(2) 供应商;(3) 谓词;(4) 函数。消费者接收一个通用参数,不返回任何值。Suppliers 不接收任何参数,返回一个值。谓词有一个参数,返回一个布尔值。函数只接受一个参数,并返回一个值。
每个基本接口都有几个相关接口。例如,Consumer 有为原始类型定制的变体(IntConsumer 、LongConsumer 和DoubleConsumer ),还有一个变体(BiConsumer ),它接受两个参数并返回void 。
虽然根据定义,本章中的接口只包含一个抽象方法,但大多数接口还包含static 或default 的附加方法。熟悉这些方法将使开发人员的工作更加轻松。
2.1 消费者
问题
您想编写实现java.util.function.Consumer 包的 Lambda 表达式。
解决方案
使用 lambda 表达式或方法引用实现void accept(T t) 方法。
讨论
java.util.function.Consumer 接口有一个抽象方法void accept(T t) 。请参见例 2-1。
例 2-1. java.util.function.Consumer 中的方法
voidaccept(Tt)defaultConsumer<T>andThen(Consumer<?superT>after)
accept 方法接收一个泛型参数并返回void 。最常用的 方法示例之一是java.util.Iterable 中的默认forEach 方法,它以Consumer 为参数,如例 2-2 所示。
例 2-2. Iterable 中的 forEach 方法
defaultvoidforEach(Consumer<?super ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access