函数式接口

函数式接口

函数式接口

在jdk8中什么是函数式接口:
1、被@FunctionalInterface注解修饰的。
2、接口里边只有一个非default的方法。
满足以上2个条件的即为函数式接口,ps:即使一个接口没有被@FunctionalInterface修饰,但是满足2,那么这样的接口也会是函数式接口。

函数式接口,对于Java来说就是接口内只有一个公开方法的接口,因为使用lanbda表达式,例如() -> user.getName()对应的调用则可能是func.get(),编译器会根据接口推断所属于的方法,如果有两个则无法推断.Java8提供了很多函数式接口,一般都使用注解@FunctionalInterface声明,有必要了解如下一些函数式接口.

函数式接口输入参数返回值描述
SupplierT接收一个T类型的值
ConsumerT输入一个T类型的参数,没有返回值
BiConsumerT,R输入两个T,R类型的参数,没有返回值
PredicateTBoolean输入一个参数,返回一个boolean值 stream的filter就接受的这个行为
ToIntFunctionTInteger输入T类型的参数 返回一个Integer的值
ToLongFunctionTLong输入T类型的参数 返回一个Long的值
ToDoubleFunctionTdouble处理T类型的值,并返回double值
FunctionTR处理T类型的值,并返回R类型值
BiFunctionT,UR处理T类型和U类型的值,并返回R类型值
BinaryOperatorT,TT处理T类型值,并返回T类型值
UnaryOperatorTT处理T类型值,并返回T类型值,

还有很多的函数式的接口,都在java.util.function这个包下。

举例:

Function、Predicate、Consumer、Supplier接口

这些接口都有一个@FunctionalInterface注解,表明这个接口将是一个函数式接口,里面只能有一个抽象方法

package com.unisound.dcs.project.async;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author: fanjiuhui
 * @Date: 2019/8/8
 * @Description:
 */
public class Test {
    public static void main(String[] args) {

       // 这些接口都有一个@FunctionalInterface注解,表明这个接口将是一个函数式接口,里面只能有一个抽象方法
       //  Function 接受一个输入参数,返回一个结果
        Function<Integer,String> function = (x) -> "result"+x;
        String apply = function.apply(1);
        System.out.println(apply);

        // Predicate 接受一个输入参数,返回布尔值
        Predicate<Integer> predicate = (x) -> 1 == x;
        boolean test = predicate.test(1);
        System.out.println(test);

        // Consumer  接受一个输入参数,无返回值
        Consumer<String> consumer = (str) -> System.out.println("str is " +str);
        consumer.accept("123");

        // Supplier  无输入参数,返回一个结果
        Supplier<String> supplier = () -> "supplier";
        String s = supplier.get();
        System.out.println(s);


    }
}

====================输出结果===============================================================
result1
true
str is 123
supplier

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值