时间:2021-05-20
函数式接口
先看一下官方定义
Functional interfaces provide target types for lambda expressions and method references.可以看出函数式接口主要用于lambda表达式,这类接口只定义了唯一的抽象方法的接口(除了隐含的Object对象的公共方法),一开始也称SAM类型接口(Single Abstract Method)。
简单使用
List<Integer> list = Lists.newArrayList(1,2,3); list.forEach(r -> { System.out.println("re = " + Math.sqrt(r)); });看一下 foreach 实现,在Iterable.java中
default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }这里出现的Consumer就是一个函数式接口, java8 提供了一些常用的函数式接口
这里就不一一列举了,具体请见 java.util.function 包 都很简单,不太清楚的自行google
扩展
但是jdk提供的有时候不一定能满足需求,这个时候就需要我们自定义函数式接口
1.普通的 Function 或者 Consumer 只能就收一个参数,BiFuntion 和 BiConsumer 也只能接受连个参数,参数更多的情况就无法满足了
以 consumer 为例,先自定义一个接口
@FunctionalInterface public interface TriConsumer<T, U, W> { void accept(T t, U u, W w); default TriConsumer<T, U, W> andThen(TriConsumer<? super T, ? super U, ? super W> after) { Objects.requireNonNull(after); return (l, r, w) -> { accept(l, r, w); after.accept(l, r, w); }; } }函数式接口一般使用 @FunctionalInterface 注解注释,以申明该接口是一个函数式接口, 这里提供一个 andThen 方法以支持连续调用
使用方法
TriConsumer<Integer, Integer, Integer> consumer = (a, b, c) -> { System.out.println(a + b + c); }; consumer.accept(5,6,7);funtion类似,这里就不举例了
2.异常捕获
FunctionalInterface 提供的接口一般是不抛出异常的,意味着我们在使用的时候需要在方法体内部捕获异常,这里定义一种可以抛出异常的接口
@FunctionalInterface public interface InterfaceException<T> { void apply(T t) throws Exception; }总结
到此这篇关于JDK都出到14了,你有什么理由不会函数式编程(推荐)的文章就介绍到这了,更多相关jdk 函数式编程内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
为什么我们需要学习函数式编程?或者说函数式编程有什么优势?这个系列中我会用scala给你讲述函数式编程中的优势,以及一些函数式的哲学。不懂scala也没关系,s
本文实例讲述了JavaScript函数式编程(FunctionalProgramming)声明式与命令式。分享给大家供大家参考,具体如下:函数式编程属于声明式编
本文实例讲述了JavaScript函数式编程(FunctionalProgramming)纯函数用法。分享给大家供大家参考,具体如下:函数式编程鼓励我们多创建纯
JavaScript就其本质是函数式编程语言,是Lisp的后代,同时又加入了一下面向对象编程的元素,放弃了一些难懂的函数式语言的元素。函数式编程语言可以实现面向
前情提要:Scala函数式编程专题——函数式思想介绍scala函数式编程专题——scala基础语法介绍前面已经稍微介绍了scala的常用语法以及面向对象的一些简