持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
前几篇文章我们从函数式接口的概念入手,之后讲解了几个常用的Java 8 内置常用的函数式接口。我们都知道,只学习而不复习会很快遗忘,所以这篇文章我们会在之前讲解的内容的基础上来完成阶段性总结。
常用接口列举
| 接口 | 输入参数 | 返回类型 | 备注 |
|---|---|---|---|
Consumer<T> | T | void | 有输入,无输出,用于消费某值 |
Function<T, R> | T | R | 输入某个类型的值,处理之后输出另外一个类型的值,用于转化等功能 |
Predicate<T> | T | boolean | 输入T 类型的值,输出boolean,用于判断 |
Supplier<T> | n/a | T | 无输入,输出T 类型的值,用于供给、产生 |
UnaryOperator<T> | T | T | 输入T 类型的值,处理之后输出相同类型的返回值,通常用于同类型的值的转化,比如进行四则运行 |
BinaryOperator<T> | (T, T) | T | 输入两个相同类型值,输出一个相同类型的值,可以用于用于两值合并、计算大小等场景 |
上述表格中展示的六中自定义接口就是我们日常开发中使用的最多的六个函数式接口了,通常能满足我们大部分开发需求。
但是有的人可能会提出疑问了,我平日里使用Java 8 进行业务开发的时候,为什么不经常见到这些呢?
其实有很多场景我们都在使用,但是的确没有显示地看到具体的接口名的出现,如Consumer 接口。这只是我们没有留心而已。比如说我们常用的遍历方法forEach,它使用的就是内置函数接口Consumer。
default void forEach(Consumer<? super T> action)
在使用的时候就可以像样:
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.forEach(System.out::println);
}
输出:1, 2, 3。
总结
以上就是常用的Java 8 内置函数式接口的讲解了。之后我们会介绍这些函数式接口的具体用用。
其实函数式接口并没有多难理解,只要记住它们的固定的出现套路,同时记住它们的格式就可以了。并且,我们要知道,这个“函数式接口”本质在使用的时候,也是一个对象。这样理解起来就比较轻松了。