JDK8 提供的标准函数接口

《Effective Java》 第44条:坚持使用标准的函数接口

一、6个基本函数接口

java.util.function包下共有43个接口。别指望能全部记住它们,但是如果能记住其中6个基本接口,必要时就可以推断出其余接口了。
基础接口作用于对象引用类型:【6】

  1. UuaryOperatorBinaryOperator接口代表其结果与参数类型一致的函数。
  2. Predicate接口代表带有一个参数并返回一个boolean的函数。
  3. Function接口代表其参数与返回的类型不一致的函数。
  4. Supplier接口代表没有参数并且返回(或者”提供“)一个值的函数。
  5. Consumer接口代表带有一个不返回任何值得函数,相当于消费掉了其参数。

这6个基本函数接口概述如下:

接口函数签名范例
UuaryOperatorT apply (T t)String::toLowerCase
BinaryOperatorT apply (T t1, T t2)BigInteger::add
Predicateboolean test(T t)Collection::isEmpty
Function<T, R>R apply(T t)Arrays::asList
SupplierT get()Instant::now
Consumervoid accept(T t)System.out::println

二、基本函数接口的变体

这6个基础接口各自有3种变体【18】,分别可以作用于基本类型intlongdouble。它们的命名方式是在其基础接口名称前面加上基本类型而得。
例如:

  • IntPredicate: 带有intpredicate接口。
  • LongUnaryOperator:一个二进制运算符带有两个long值参数并返回一个long值。
  • LongFunction<R>LongFunction<int[]> 表示带有一个long参数,并返回一个 int[] 数组。

这些变体接口的类型都不是参数化的,除了Function变体外,后者是以返回类型为参数。

Function接口还有9种变体【9】,用于结果类型为基本类型的情况。源类型和结果类型始终不一样,因为从类型到自身的函数就是UnaryOperator。如果源类型和结果类型均为基本类型,就是在Function前面添加格式Src To Result,如LongToIntFunction(有6种变体)。如果源类型为基础类型,结果类型是一个对象参数,则要在Function前添加Src To Obj,如DoubleToObjFunction(有3种变体)。

这三种基础函数接口还有带两个参数的版本,如BiPredicate<T, U>BiFunction<T, U, R>BiConsumer<T, U>

BiFunction<T, U, R>回返是基础类型的三个变体:

  • ToIntBiFunction<T, U>
  • ToLongBiFunction<T, U>
  • ToDoubleBiFunction<T, U>

Consumer接口也有带两个参数的变体版本,它们带一个对象引用和一个基础类型:

  • ObjDoubleConsumer<T>
  • ObjIntConsumer<T>
  • ObjLongConsumer<T>

总之,这些基础接口有9种带两个参数的版本【9】。

最后,还有BooleanSupplier接口【1】,它是Supplier接口的一种变体,返回boolean值。这是在所有的标准函数接口名称中唯一显式提到boolean类型的,但boolean返回值是通过Predicate及其4种变体支持的。

这样总共就是43【6+18+9+9+1】个标准函数接口。显然,这是个大数目,但是它们之间并非纵横交错。另一方面,你需要的函数接口都替你写好了,它们的名称都是循规蹈矩的,需要的时候并不难找到了。

引用–《Effective Java》中文版(原书第3版)[美](Joshua Bloch)著 俞黎敏 译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值