第三章(2) JAVA8 api为我们提供的函数式接口
咱们书接上回,上回咱们说到,Java 8的库设计师帮你在java.util.function包中引入了几个新的函数式接口。我们接下来会介绍Predicate、Consumer和Function。
1.Predicate(谓词)
关于谓词,我们之前在第二章中说过,它是返回布尔值的一种抽象方法。那么在java8中,已经为我们提供了这个接口了,我们直接拿来用就可以了,如下
使用案例:
2. Consumer(消费者)
顾名思义,消费者,就是把东西消耗消费掉,或者说使用掉,当你要对某个对象执行某些操作的时候,你就可以使用它。
代码示例:
3.Function(函数)
java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。如果你需要定义一个Lambda,将输入对象的信息映射到输出,就可以使用这个接口(比如提取猪对象的重量,或把字符串映射为它的长度)。在下面的代码中,我们向你展示如何利用它来创建一个map方法,以将一个String列表映射到包含每个String长度的Integer列表。
代码示例:
除了这三个最基本的函数式接口以外,java8还提供了很多基于这三个函数的变种,比如我们都知道这三个基本的函数式接口都用到了泛型,但是在java中泛型只对于引用类型有效,故对于基本数据类型比如int,我们需要对其装箱处理(Integer),尽管java中的装箱与拆箱都是自动进行的,但是这用做不可避免的要消耗一些内存,所以有了诸如DoublePredicate、IntConsumer、LongBinaryOperator、IntFunction等专门处理基本数据类型的接口等等,当然还有其他很多java8提供的函数式接口用于不同的用途,但是基本上都和本章详细介绍的三个基本接口差不多,或者说是这三个的变种,搞明白了这三个,其他的接口也能轻易理解哦,具体可以查看java8文档。