函数式接口和Lambda表达式

网友投稿 966 2022-11-07

函数式接口和Lambda表达式

函数式接口和Lambda表达式

函数式接口——@FunctionalInterface

@FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口。

通过JDK8源码javadoc,可以知道这个注解有以下特点:

1、该注解只能标记在"有且仅有一个抽象方法"的接口上。

2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。

4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。

// 正确的函数式接口@FunctionalInterfacepublic interface TestInterface { // 抽象方法 public void sub(); // java.lang.Object中的方法不是抽象方法 public boolean equals(Object var1); // default不是抽象方法 public default void defaultMethod(){ } // static不是抽象方法 public static void staticMethod(){ }}

示例

@FunctionalInterfaceinterface IService { void insert(String message);}public class FunctionalInterfaceTest { public static void main(String[] args) { IService serviceObj = message -> System.out.println("Hello, " + message); serviceObj.insert("Sam"); }}

输出结果

Hello, Sam

Java8前已有的函数式接口

java.lang.Runnablejava.util.concurrent.Callablejava.security.PrivilegedActionjava.util.Comparatorjava.io.FileFilterjava.nio.file.PathMatcherjava.lang.reflect.InvocationHandlerjava.beans.PropertyChangeListenerjava.awt.event.ActionListenerjavax.swing.event.ChangeListener

Java8新增的package→java.util.function

内含43个函数式接口:

Interface    Description BiConsumer    代表了一个接受两个输入参数的操作,并且不返回任何结果 BiFunction    代表了一个接受两个输入参数的方法,并且返回一个结果 BinaryOperator    代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果 BiPredicate    代表了一个两个参数的boolean值方法 BooleanSupplier    代表了boolean值结果的提供方 Consumer    代表了接受一个输入参数并且无返回的操作 DoubleBinaryOperator    代表了作用于两个double值操作符的操作,并且返回了一个double值的结果 DoubleConsumer    代表一个接受double值参数的操作,并且不返回结果 DoubleFunction    代表接受一个double值参数的方法,并且返回结果 DoublePredicate    代表一个拥有double值参数的boolean值方法 DoubleSupplier    代表一个double值结构的提供方 DoubleToIntFunction    接受一个double类型输入,返回一个int类型结果 DoubleToLongFunction    接受一个double类型输入,返回一个long类型结果 DoubleUnaryOperator    接受一个参数同为类型double,返回值类型也为double Function    接受一个输入参数,返回一个结果 IntBinaryOperator    接受两个参数同为类型int,返回值类型也为int IntConsumer    接受一个int类型的输入参数,无返回值 IntFunction    接受一个int类型输入参数,返回一个结果 IntPredicate    接受一个int输入参数,返回一个布尔值的结果 IntSupplier    无参数,返回一个int类型结果 IntToDoubleFunction    接受一个int类型输入,返回一个double类型结果 IntToLongFunction    接受一个int类型输入,返回一个long类型结果 IntUnaryOperator    接受一个参数同为类型int,返回值类型也为int LongBinaryOperator    接受两个参数同为类型long,返回值类型也为long LongConsumer    接受一个long类型的输入参数,无返回值 LongFunction    接受一个long类型输入参数,返回一个结果 LongPredicate    R接受一个long输入参数,返回一个布尔值类型结果 LongSupplier    无参数,返回一个结果long类型的值 LongToDoubleFunction    接受一个long类型输入,返回一个double类型结果 LongToIntFunction    接受一个long类型输入,返回一个int类型结果 LongUnaryOperator    接受一个参数同为类型long,返回值类型也为long ObjDoubleConsumer    接受一个object类型和一个double类型的输入参数,无返回值 ObjIntConsumer    接受一个object类型和一个int类型的输入参数,无返回值 ObjLongConsumer    接受一个object类型和一个long类型的输入参数,无返回值 Predicate    接受一个输入参数,返回一个布尔值结果 Supplier    无参数,返回一个结果 ToDoubleBiFunction    接受两个输入参数,返回一个double类型结果 ToDoubleFunction    接受一个输入参数,返回一个double类型结果 ToIntBiFunction    接受两个输入参数,返回一个int类型结果 ToIntFunction    接受一个输入参数,返回一个int类型结果 ToLongBiFunction    接受两个输入参数,返回一个long类型结果 ToLongFunction    接受一个输入参数,返回一个long类型结果 UnaryOperator    接受一个参数为类型T,返回值类型也为T

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes CNI组件Calico:IPIP工作模式
下一篇:Oracle Rman-备份脚本
相关文章

 发表评论

暂时没有评论,来抢沙发吧~