作者:鱼影沫1457 | 来源:互联网 | 2023-07-14 22:32
本文源码:Gitee·点这里
什么是函数式接口 在介绍他们之前,我们先看看什么是函数式接口。先打开API
文档,查看FunctionalInterface
的介绍。
从API
中介绍可以看出:
@FunctionalInterface
是一个注解,旨在声明接口类型为函数式接口,切只能加在接口上。函数式接口只允许有一个抽象方法 可以包含使用default
声明的方法,因为该方法为普通方法(Java8以后允许在接口中使用default
声明一个普通方法) 可以使用Lambada
表达式创建函数式接口的实例 注:如果接口符合函数式接口的要求,即使不加@FunctionalInterface
注解也会被视为函数式接口
四大函数式接口有哪些 从java.util.function
包的介绍可以看出,Java有四大函数式接口,分别为Function
、Consumer
、Predicate
、Supplier
,我们来逐个介绍,相信看完后你会对函数式接口有更深的理解。
Function
函数型接口 表示接收一个参数并返回结果的函数。该函数式接口方法为R apply(T t)
:
示例代码 示例1:函数式接口可以被new出一个实例来,必须实现其抽象接口
static void functionDemo1 ( ) { Function< Integer, String> function &#61; new Function < Integer, String> ( ) { &#64;Override public String apply ( Integer integer) { return integer. toString ( ) &#43; "程序员节" ; } } ; System. out. println ( "functionDemo1 --> " &#43; function. apply ( 1024 ) ) ; }
示例2&#xff1a;可以使用Lambada表达式简化函数式接口
static void functionDemo2 ( ) { Function< Integer, String> function &#61; ( integer) - > { return integer. toString ( ) &#43; "程序员节" ; } ; System. out. println ( "functionDemo2 --> " &#43; function. apply ( 1024 ) ) ; }
示例3&#xff1a;Lambada表达式入参只有一个时&#xff0c;可以不加小括号&#xff1b; 方法体内只有一行代码时可以不加大括号和 return 关键字&#xff0c;直接编写返回结果即可
static void functionDemo3 ( ) { Function< Integer, String> function &#61; integer - > integer. toString ( ) &#43; "程序员节" ; System. out. println ( "functionDemo2 --> " &#43; function. apply ( 1024 ) ) ; }
示例4&#xff1a;函数式接口做为方法的入参
static void functionDemo4 ( Integer integer, Function< Integer, String> function) { System. out. println ( "functionDemo4 --> " &#43; function. apply ( integer) ) ; } public static void main ( String[ ] args) { functionDemo4 ( 1024 , integer - > integer. toString ( ) &#43; "程序员节" ) ; }
Predicate
断定型接口 表示接收一个参数&#xff0c;判断该参数是否满足某约束&#xff0c;并返回boolean
值。该函数式接口方法为boolean test(T t)
。
示例代码 示例1&#xff1a;new
一个Predicate
实例
static void predicateDemo1 ( ) { Predicate< Integer> predicate &#61; integer - > integer &#61;&#61; 1024 ; System. out. println ( "predicateDemo1 --> " &#43; predicate. test ( 1024 ) ) ; }
示例2&#xff1a;Predicate
做为方法的入参
static void predicateDemo2 ( Integer integer, Predicate< Integer> predicate) { System. out. println ( "predicateDemo1 --> " &#43; predicate. test ( integer) ) ; } public static void main ( String[ ] args) { predicateDemo2 ( 1024 , integer - > integer &#61;&#61; 1024 ) ; }
Consumer
消费型接口 接收一个参数但不返回结果&#xff0c;表示为消费者。该函数式接口方法为void accept(T t)
示例代码 示例1&#xff1a;new
一个Consumer
实例
static void consumerDemo1 ( ) { Consumer< Integer> consumer &#61; integer - > System. out. println ( "consumerDemo1 --> " &#43; integer) ; consumer. accept ( 1024 ) ; }
示例2&#xff1a;Consumer
作为方法的入参
static void consumerDemo2 ( Integer integer, Consumer< Integer> consumer) { consumer. accept ( integer) ; } public static void main ( String[ ] args) { consumerDemo2 ( 1024 , integer - > System. out. println ( "consumerDemo2 --> " &#43; integer) ) ; }
Supplier
供给型接口 与Consumer
相反&#xff0c;Supplier
只有返回结果&#xff0c;表示为提供者。该函数式接口方法为T get()
示例代码 示例1&#xff1a;new
一个Supplier
实例
static void supplierDemo1 ( ) { Supplier< Integer> supplier &#61; ( ) - > 1024 ; System. out. println ( "supplierDemo1 --> " &#43; supplier. get ( ) ) ; }
示例2&#xff1a;Supplier
作为方法的入参
static void supplierDemo2 ( Supplier< Integer> supplier) { System. out. println ( "supplierDemo2 --> " &#43; supplier. get ( ) ) ; } public static void main ( String[ ] args) { supplierDemo2 ( ( ) - > 1024 ) ; }
四大函数式接口总结 为了便于记忆&#xff0c;我们对四大函数式接口进行一个总结&#xff1a;
函数式接口 接口类型 参数类型 返回类型 方法 Function
函数型接口 T R R apply(T t) Predicate
断定型接口 T boolean boolean test(T t) Consumer
消费型接口 T void void accept(T t) Supplier
供给型接口 无 T T get()
其他函数式接口&#xff08;扩展&#xff09; 在java.util.function
包下还包含了其他函数式接口供我们使用&#xff0c;也是对这四大函数式接口进行的一个扩展
函数型接口 函数式接口 参数类型 返回类型 方法 用途 BiFunction
T,U R R apply(T t, U u) 接收两个输入参数并产生结果 ToIntBiFunction
T,U int int applyAsInt(T t,U u) 接收两个输入参数并返回int类型结果 ToLongBiFunction
T,U long long applyAsLong(T t, U u) 接收两个输入参数并返回long类型结果 ToDoubleBiFunction
T,U double double(T t, U u) 接收两个输入参数并产生double类型结果 ToIntFunction
T int int applyAsInt(T value) 接收一个参数并返回int类型结果 ToDoubleFunction
T double double applyAsDouble(T value) 接收一个参数并返回double类型结果 IntFunction
int R R apply(int value) 接收一个int类型参数&#xff0c;并返回结果 LongFunction
long R R apply(long value) 接收一个long类型参数&#xff0c;并返回结果 DoubleFunction
double R R apply(double value) 接收一个double类型参数&#xff0c;并返回结果 IntToDoubleFunction
int double double applyAsDouble(int value) 接收一个int类型参数&#xff0c;返回double类型结果 LongToDoubleFunction
long double double applyAsDouble(long value) 接收一个long类型参数&#xff0c;返回double类型结果 LongToIntFunction
long int int applyAsInt(long value) 接收一个long类型参数&#xff0c;返回int类型结果 IntToLongFunction
int long long applyAsLong(int value) 接收一个int类型参数&#xff0c;返回long类型结果 DoubleToIntFunction
double int int applyAsInt(double value) 接收一个double类型参数&#xff0c;返回int类型结果 DoubleToLongFunction
double long long applyAsLong(double value) 接收一个double类型参数&#xff0c;返回long类型结果 BinaryOperator
T,T T T apply(T t1, T t2) 是BiFunction
的一个子接口&#xff0c;表示对同一类型的两个参数进行操作&#xff0c;产生同一类型的结果 UnaryOperator
T T T apply(T t) 是Function
的一个子接口&#xff0c;表示对单个参数操作&#xff0c;产生同一类型的结果 LongBinaryOperator
long,long long long applyAsLong(long left, long right) 对两个long值计算并产生long结果 DoubleBinaryOperator
double,double double double applyAsDouble(double left, double right) 对两个double值计算并产生double结果 IntUnaryOperator
int int int applyAsInt(int operand) 对单个int值操作&#xff0c;产生一个int结果 LongUnaryOperator
long long long applyAsLong(long operand) 对单个long值操作&#xff0c;产生一个long结果 DoubleUnaryOperator
double double double applyAsDouble(double operand) 对单个double值操作&#xff0c;返回一个double结果 IntBinaryOperator
int,int int int applyAsInt(int left, int right) 对两个int值计算并产生int结果
断定型接口 函数式接口 参数类型 返回类型 方法 用途 BiPredicate
T,U boolean boolean test(T t, U u) 接收两个输入参数&#xff0c;断定并返回boolean类型结果 IntPredicate
int boolean boolean test(int value) 接收一个int参数值&#xff0c;断定并返回boolean类型结果 LongPredicate
long boolean boolean test(long value) 接收一个long类型参数&#xff0c;断定并返回boolean类型结果 DoublePredicate
double boolean boolean test(double value) 接收一个double参数值&#xff0c;断定并返回boolean类型结果
消费型接口 函数式接口 参数类型 返回类型 方法 用途 BiConsumer
T,U void void accept(T t, U u) 接收两个输入参数&#xff0c;不返回结果 ObjIntConsumer
T,int void void accept(T t, int value) 接收对象值和int类型参数&#xff0c;不返回结果 ObjLongConsumer
T,long void void accept(T t, long value) 接收对象值和long类型参数&#xff0c;不返回结果 ObjDoubleConsumer
T,double void void accept(T t, double value) 接收对象值和double类型参数&#xff0c;不返回结果 LongConsumer
long void void accept(long value) 消费long类型值&#xff0c;不返回结果 DoubleConsumer
double void void accept(double value) 消费double类型值&#xff0c;不返回结果 IntConsumer
int void void accept(int value) 消费int类型值&#xff0c;不返回结果
供给型接口 函数式接口 参数类型 返回类型 方法 用途 BooleanSupplier
无 boolean boolean getAsBoolean() 表示供给boolean类型的结果 IntSupplier
无 int int getAsInt() 表示供给int类型的结果 LongSupplier
无 long long getAsLong() 表示供给long类型的结果 DoubleSupplier
无 double double getAsDouble() 表示供给double类型的结果