Function相关接口简介

Function相关接口简介

什么是Function接口?

interface Function<T, R>,它表明这样的一个函数,接受一个参数,而后返回一个结果。segmentfault

Function接口的functional方法

R apply(T t)

表示,接受一个类型为T的参数t,返回一个类型为R的结果。注意:app

  1. TR能够是同一种类型,固然也能够是不一样的类型。
  2. 这里只接受一个参数。

那么问题来了,我有两个、三个参数怎么办?函数

什么是BiFunction接口?

interface BiFunction<T, U, R>,从名字上你们应该就能推断出来,它表明这样的一个函数,接受两个参数,而后返回一个结果。code

BiFunction接口的functional方法

R apply(T t, U u);

表示,接受两个参数t和u,类型分别为TU的,返回一个类型为R的结果。注意:接口

  1. TUR能够是同一种类型,固然也能够是不一样的类型。
  2. 这里只接受两个参数。

如今我们再来看上面的问题,三个参数的时候怎么办?function包下并无这样的接口,因此咯,本身动手丰衣足食:ip

public interface TripleFunction<T, U, M, R> {
          R apply(T t, U u, M m);
  }

更进一步

function包还很贴心地为咱们提供了不少经常使用的functional接口,其中很大一部分就是和原始类型Primitive Type)有关的。一旦掌握了其中的规律,能够达到触类旁通、事半功倍的效果。下面就跟着彬哥一块儿来看看吧。ci

做为参数的原始类型来划分

  1. DoubleFunction,接受一个类型为double的参数,返回一个结果。get

    @FunctionalInterface
        public interface DoubleFunction<R> {
            R apply(double value);
        }
  2. IntFunction,接受一个类型为int的参数,返回一个结果。it

    @FunctionalInterface
        public interface IntFunction<R> {
            R apply(int value);
        }
  3. LongFunction,接受一个类型为long的参数,返回一个结果。io

    @FunctionalInterface
        public interface LongFunction<R> {
            R apply(long value);
        }

做为返回值的原始类型来划分

  1. ToDoubleFunction,接受一个参数,返回一个类型为double的结果。

    @FunctionalInterface
        public interface ToDoubleFunction<R> {
            double applyAsDouble(T value);
        }
  2. ToIntFunction,接受一个参数,返回一个类型为int的结果。

    @FunctionalInterface
        public interface ToIntFunction<R> {
            int applyAsInt(T value);
        }
  3. ToLongFunction,接受一个参数,返回一个类型为long的结果。

    @FunctionalInterface
        public interface ToLongFunction<R> {
            long applyAsLong(T value);
        }

参数和返回值相互转化的

3个做为参数的和3个做为返回值的相互组合、去掉重复的

嗯,又Get到6种functional接口:

DoubleToIntFunctionDoubleToLongFunctionIntToDoubleFunctionIntToLongFunctionLongToDoubleFunctionLongToIntFunction

再更进一步

刚刚我们划分出来的这个12个functional接口都是和Function相关的(一元),那function包有没有给咱们提供其余和BiFunction相关的functional接口呢?

固然有。

那我们就来看看这些二元的functional接口吧。

  1. ToDoubleBiFunction,接受两个参数,返回一个类型为double的结果。

    @FunctionalInterface
        public interface ToDoubleBiFunction<R> {
            double applyAsDouble(T t, U u);
        }
  2. ToIntBiFunction,接受两个参数,返回一个类型为int的结果。

    @FunctionalInterface
        public interface ToIntBiFunction<R> {
            int applyAsInt(T t, U u);
        }
  3. ToLongBiFunction,接受两个参数,返回一个类型为long的结果。

    @FunctionalInterface
        public interface ToLongBiFunction<R> {
            long applyAsLong(T t, U u);
        }

彬哥,这些只是做为返回值的接口,按照上面一元function的划分,那做为参数相互转化的二元接口呢?

那些啊,funciton包就并无提供了,一来不经常使用,二来啊,通过彬哥的介绍,相信你已经掌握规律了,很容易就写出来了吧?那就做为课后做业如何?

小结

这一讲,我们主要介绍了Function相关的functional接口,按大的方面能够以一元二元来分类;再细分的话,能够按原始类型做为参数做为返回值参数返回值相互转化的类别来划分。

另外呀,能够用function包概述及大纲做为参考手册来回顾和查询。

相关文章
相关标签/搜索