JAVA8(三) 函数式接口

@[toc](Java8 函数式接口详解)

### 1、为什么有函数式接口

- 为Lambda表达式、方法和构造方法引用提供目标类型。

- 可以在多个上下文中提供目标类型

```java

Predicate<String> p=String::isEmpty;

stream.map((ToIntFunction)e->e.getSize())…

```

### 2、函数式接口介绍

- 概念

     * 有且仅有一个抽象方法,但可以有多个非抽象方法的接口

- 格式

```java

/*

  标明为函数式接口的注解,注解可有可无

  该注解只是提醒编译器去检查该接口是否包涵一个抽象方法 

*/

@FunctionInterface

public abstract MyFunctionInterface{

    //一个抽象方法

    void mrthod();

    //允许定义默认方法

    default void add()

    

    //允许定义静态方法

    static void uodate();

    //允许定义java.lang.Object的public方法

    @Override

    boolean equals(Object obj);

}

```

### 3、内置函数式接口

**JDK8中引入新包java.util.function,此包中的接口可分为四类** 

|类型|说明|

|--|--|

|Function|转换或提取:接收参数,并返回结果,主要方法R apply(T t)|

|Consumer|消费者:接收参数,无返回结果,主要方法void accept(T t)|

|Supplier|供应商:不接收参数,但返回结构,主要方法T get()|

|Predicate|断言:接收参数,返回boolean值,主要方法boolean test(T t)|

==Function(1)接收**一个**参数==

|interface|functional method|说明|

|--|--|--|

|Function<T,R>|R apply(T t)|接收参数类型为T,返回类型为R|

|IntFunction<*R*>|R apply(int value)|以下三个接口,指定接收参数类型,返回类型为泛型R|

|LongFunction<*R*>|R apply(long value)||

|Double<*R*>|R apply(double value)||

|ToIntFunction<*T*>|int applyAsInt(T value)|以下三个接口,指定了返回参数类型,接收参数类型为泛型T|

ToLongFunction<*T*>|long applyAsLong(T value)|| |ToDoubleFunction<*T*>|double applyAsDouble(T value)||

|IntToLongFunction| long applyAsLong(int value)| 以下六个接口,既指定了接收参数类型,也指定了返回参数类型|

|IntToDoubleFunction|double applyAsLong(int value)||

|LongToIntFunction|int applyAsLong(long value)||

|LongToDoubleFunction|double applyAsLong(long value)||

|DoubleToIntFunction|int applyAsLong(double value)||

|DoubleToLongFunction|long applyAsLong(double value)||

|UnaryOperator<*T*>|T apply(T t)|特殊的Function,接收参数类型和返回参数类型一样|

|IntUnaryOperator|int applyAsInt(int left, int right)|以下三个接口,指定了接收参数和返回参数类型,并且都一样|

|LongUnaryOperator|long applyAsInt(long left, long right)||

|DoubleUnaryOperator|double applyAsInt(double left, double right)||

==Function(2)接收**两个**参数==

|interface|functional method|说明|

|--|--|--|

|BiFunction<T,U,R>|R apply(T t, U u)|接收两个参数的Function|

|ToIntBiFunction<T,U>|int applyAsInt(T t, U u)|以下三个接口,指定了返回参数类型,接收参数类型分别为泛型T, U|

|ToLongBiFunction<T,U>|long applyAsLong(T t, U u)|| 

|ToDoubleBiFunction<T,U>| double appleyAsDouble(T t, U u)|| 

|BinaryOperator<T>| T apply(T t, T u) |特殊的BiFunction, 接收参数和返回参数类型一样|

|IntBinaryOperator| int applyAsInt(int left, int right)|| 

|LongBinaryOperator |long applyAsInt(long left, long right)|| 

|DoubleBinaryOperator |double applyAsInt(double left, double right)||

==Consumer消费者:接收**一个**参数==

|interface|functional method|说明|

|--|--|--|

|Consumer<*T*>|void accept(T t)|接收一个泛型参数,无返回值|

|IntConsumer|void accept(int value)| 以下三个类,接收一个指定类型的参数|

|LongConsumer|void accept(long value)||

|DoubleConsumer|void accept(double value)||

==Consumer消费者:接收**两个**参数==

|interface|functional method |说明|

|--|--|--|

|BiConsumer<T,U> |void accept(T t, U u)| 接收两个泛型参数|

|ObjIntConsumer<*T*> |void accept(T t, int value)| 以下三个类,接收一个泛型参数,一个指定类型的参数|

|ObjLongConsumer<*T*>| void accept(T t, long value)|| 

|ObjDoubleConsumer<*T*> |void accept(T t, double value)|| 

==Supplier供应商==

|interface| functional method |说明|

|--|--|--|

|Supplier<*T*> |T get()| 返回类型为泛型T|

|BooleanSupplier| boolean getAsBoolean() |以下三个接口,返回指定类型|

|IntSupplier| int getAsInt()|| 

|LongSupplier| long getAsLong() ||

|DoubleSupplier |double getAsDouble()|| 

==Predicate断言==

|interface |functional method |说明|

|--|--|--|

|Predicate<*T*> |boolean test(T t) |接收一个泛型参数|

|IntPredicate| boolean test(int value) |以下三个接口,接收指定类型的参数|

|LongPredicate| boolean test(long value)||

|DoublePredicate|boolean test(double value)|| 

|BiPredicate<T,U>|boolean test(T t, U u)|接收两个泛型参数,分别为T,U|

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42242792

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值