java内置的函数式接口介绍及使用举例

lambda表达式的本质:作为函数式接口的实例

  • 如果在一个接口中,只声明了一个抽象方法,则此接口就被称为函数式接口,我们可以在一个接口上使用,@FunctionalInterface注解来验证该接口是否为函数式接口(吐过在该接口中写两个方法,则会编译失败)
  • 正是因为抽象方法中只有一个方法,所以我们才可以省略@Override函数声明等内容
    在java.util.function包下定义了Java 8 的丰富的函数式接口
    Java从诞生日起就是一直倡导“一切皆对象”,在Java里面面向对象(OOP)编程是一切。但是随着Python、Scala等语言的兴起和新技术的挑战,Java不得不做出调整以便支持更加广泛的技术要求,也即java不但可以支持OOP还可以支持OOF(面向函数编程)
    在函数式编程语言当中,函数被当做一等公民对待。在将函数作为一等公民的编程语言中,Lambda表达式的类型是函数。但是在Java8中,有所不同。在Java8中,Lambda表达式是对象,而不是函数,它们必须依附于一类特别的对象类型——函数式接口。
    简单的说,在Java8中,Lambda表达式就是一个函数式接口的实例。这就是Lambda表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用Lambda表达式来表示。
    所以以前用匿名实现类表示的现在都可以用Lambda表达式来写。

Java内置的函数式接口介绍及使用举例

函数式接口 参数类型 返回类型 用途
Consumer 消费型接口 T void 对类型为T的对象应用操作,包含方法:void accept(T t)
Supplier 供给型接口 T 返回类型为T的对象,包含方法:T get()
Function<T, R>函数型接口 T R 对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法:R apply(T t)
Predicate断定型接口 T boolean 确定类型为T的对象是否满足某约束,并返回boolean 值。包含方法:boolean test(T t)
BiFunction<T,U,R> T, U R 对类型为T,U参数应用操作,返回R类型的结果。包含方法为:R apply(T t,U u);
UnaryOperator(Function子接口) T T 对类型为T的对象进行一元运算,并返回T类型的结果。包含方法为:T apply(T t);
BinaryOperator(BiFunction子接口) T,T T 对类型为T的对象进行二元运算,并返回T类型的结果。包含方法为:T apply(T t1,T t2);
BiConsumer<T,U> T,U void 对类型为T,U参数应用操作。包含方法为:void accept(Tt,Uu)
BiPredicate<T,U> T,U boolean 包含方法为:booleantest(Tt,Uu)
ToIntFunction T int 计算int值的函数
ToLongFunction T long 计算long值的函数
ToDoubleFunction T double 计算double值的函数
IntFunction int R 参数为int类型的函数
LongFunction long R 参数为long类型的函数
DoubleFunction double R 参数为double类型的函数
posted @ 2024-06-19 16:49  spiderMan1-1  阅读(23)  评论(0编辑  收藏  举报