Java-函数式接口

Java-函数式接口
白开水船长如果一个接口中,只声明了一个抽象方法,则此接口就称为函数式接口。
我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。
在 java.util.function 包下定义了Java 8 的丰富的函数式接口
- Java从诞生日起就是一直倡导“一切皆对象”,在 Java 里面面向对象(OOP)编程是一切。但是随着 python、scala 等语言的兴起和新技术的挑战,Java 不得不做出调整以便支持更加广泛的技术要求,也即 java 不但可以支持 OOP 还可以支持 OOF(面向函数编程)
- 在函数式编程语言当中,函数被当做一等公民对待。在将函数作为一等公民的编程语言中,Lambda 表达式的类型是函数。但是在 Java8 中,有所不同。在 Java8 中,Lambda 表达式是对象,而不是函数,它们必须依附于一类特别的对象类型——函数式接口。
- 简单的说,在 Java8 中,Lambda 表达式就是一个函数式接口的实例。这就是 Lambda 表达式和函数式接口的关系。也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用 Lambda 表达式来表示。
所以以前用匿名实现类表示的现在都可以用 Lambda 表达式来写。
Java内置的函数式接口介绍及使用举例
前4种为 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类型的结果。包含方法为:Rapply(T t,U u); |
| UnaryOperator(Function子接口) | T | T | 对类型为T的对象进行一元运算,并返回T类型的结果。包含方法为:Tapply(T t); |
| BinaryOperator(BiFunction子接口) | T,T | T | 对类型为T的对象进行二元运算,并返回T类型的结果。包含方法为:Tapply(T t1,T t2); |
| BiConsumer<T,U> | T,U | void | 对类型为T,U参数应用操作。包含方法为:voidaccept(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类型的函数 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果
