JAVA8 函数式编程—function包接口梳理

前言

函数式接口(Functional Interface)是Java 8对一类特殊类型的接口的称呼。 这类接口只定义了唯一的抽象方法的接口,并且这类接口使用了@FunctionalInterface进行注解。在jdk8中,引入了一个新的包java.util.function, 可以是java 8 的函数式编程变得更加简便。这个package中的接口大致分为了以下四类:

  • Function: 接收参数,并返回结果,主要方法 R apply(T t)
  • Consumer: 接收参数,无返回结果, 主要方法为 void accept(T t)
  • Supplier: 不接收参数,但返回结果,主要方法为 T get()
  • Predicate: 接收参数,返回boolean值,主要方法为 boolean test(T t)

本文也按照这四类,来梳理下java8对函数式编程做了哪些支持。

1、Function

Function接口表示一个方法接收参数并返回结果。

1.1 单个参数(一元函数)

1.1.1、参数类型和返回值类型调用处指定

接口方法参数类型返回值类型
Function<T,R>R apply(T t)TR

1.1.2、指定参数类型,返回值类型由调用处指定

接口方法参数类型返回值类型
IntFunction< R>R apply(int value)intR
LongFunction< R>R apply(long value)longR
Double< R>R apply(double value)doubleR

1.1.3、参数类型有调用处指定,指定返回值类型

接口方法参数类型返回值类型
ToIntFunction< T>int applyAsInt(T value)Tint
ToLongFunction< T>long applyAsLong(T value)Tlong
ToDoubleFunction< T>double applyAsDouble(T value)Tdouble

1.1.4、既指定了接收参数类型,也指定了返回参数类型

接口方法参数类型返回值类型
IntToLongFunctionlong applyAsLong(int value)intlong
IntToDoubleFunctiondouble applyAsLong(int value)intdouble
LongToIntFunctionint applyAsLong(long value)longint
LongToDoubleFunctiondouble applyAsLong(long value)longdouble
DoubleToIntFunctionint applyAsLong(double value)doubleint
DoubleToLongFunctionlong applyAsLong(double value)doublelong

1.1.5、特殊的Function,接收参数类型和返回参数类型一样

接口方法参数类型返回值类型
UnaryOperator< T>T apply(T t)TT
IntUnaryOperatorint applyAsInt(int operand)intint
LongUnaryOperatorlong applyAsLong(long operand)longlong
DoubleUnaryOperatordouble applyAsDouble(double operand)doubledouble

1.2、两个参数(二元函数)

1.2.1、参数类型和返回值类型都由调用处指定

接口方法参数类型返回值类型
BiFunction<T,U,R>R apply(T t, U u)T,UR

1.2.2、指定返回参数类型

接口方法参数类型返回值类型
ToIntBiFunction<T,U>int applyAsInt(T t, U u)T,Uint
ToLongBiFunction<T,U>long applyAsLong(T t, U u)T,Ulong
ToDoubleBiFunction<T,U>double appleyAsDouble(T t, U u)T,Udouble

1.2.3、特殊的BiFunction, 接收参数和返回参数类型一样

接口方法参数类型返回值类型
BinaryOperator< T>T apply(T t, T u)T,TT
IntBinaryOperatorint applyAsInt(int left, int right)int,intint
LongBinaryOperatorlong applyAsInt(long left, long right)long,longlong
DoubleBinaryOperatordouble applyAsInt(double left, double right)double,doubledouble

2、Consumer

表示一个方法接收参数但不产生返回值。

2.1、接受一个参数(一元函数)

接口方法参数类型返回值
Consumer< T>void accept(T t)T无返回值
IntConsumervoid accept(int value)int无返回值
LongConsumervoid accept(long value)long无返回值
DoubleConsumervoid accept(double value)double无返回值

2.2、接受两个参数(二元函数)

接口方法参数类型返回值
BiConsumer<T,U>void accept(T t, U u)T,U无返回值
ObjIntConsumer< T>void accept(T t, int value)T,int无返回值
ObjLongConsumer< T>void accept(T t, long value)T,long无返回值
ObjDoubleConsumer< T>void accept(T t, double value)T,double无返回值

3、Supplier

返回一个结果,并不要求每次调用都返回一个新的或者独一的结果

接口方法参数类型返回值
Supplier< T>T get()无参数T
BooleanSupplierboolean getAsBoolean()无参数boolean
IntSupplierint getAsInt()无参数int
LongSupplierlong getAsLong()无参数long
DoubleSupplierdouble getAsDouble()无参数double

4、Predicate

根据接收参数进行断言,返回boolean类型

接口方法参数类型返回值
Predicate< T>boolean test(T t)Tboolean
IntPredicateboolean test(int value)intboolean
LongPredicateboolean test(long value)longboolean
DoublePredicateboolean test(double value)doubleboolean
BiPredicate<T,U>boolean test(T t, U u)T,Uboolean
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值