一、问题
Java 8 中的 Stream 用过吗?请介绍一下。二、回答
1.概述
Stream 是 Java 8 中提供的对数据集合进行处理和运算的一套 API,能够非常方便地对数据集合进行处理。Stream 的意思就是流,对于 Stream 的处理可以这样理解,将数据集合看作是流,流在管道中传输,并且在管道的各个节点上进行处理(如 过滤、排序等)。
这里的管道的各个节点,对应到代码中,就是通过调用 Stream 的 API 所定义的各种操作。
2.使用
Stream 的使用主要是以下几个步骤:创建流、中间操作、终止操作。
2.1.创建流
通常是通过集合类的 stream方法 去为集合创建其 Stream 对象,如 List 的 stream方法。也可以 Stream 类的方法(如 Stream.of()
)去创建。
2.2.中间操作
创建好 Stream 对象后,就通过调用其中间操作的方法 去定义对数据的处理。
特别的一点是,中间操作的方法,返回类型也是一个 Stream,因此调用完一个中间操作方法后、可以紧接着调用另一个中间操作方法,形成链式编程的方式。
函数式编程
需要注意的是,Stream 操作方法的参数通常是函数式接口,因此在调用 Stream 操作方法时,通常是以 Lambda 表达式实现函数式接口的方式去进行调用。
这样的函数式编程的方式,非常方便我们定义对集合元素的操作。
函数式接口:
指仅包含一个抽象方法的接口。如 Function、Consumer、Supplier。
函数式编程:
函数可以像其他数据类型一样,作为参数进行传递、作为返回值,或者赋值给变量。
常用的中间操作:
- filter 根据条件过滤元素
- map 对元素做映射转换
- sorted 排序
- distinct 去重
2.3.终止操作
在中间操作之后,执行终止操作。
终止操作,顾名思义,会终止流的执行;在终止操作之后,就不能对流使用任何中间操作。
常用的终止操作:
- forEach:迭代流中的每个数据。
- count:统计流中的元素个数。
- collect:将流中的元素收集为一个数据结构中,如 收集为一个List 集合。
3.优缺点
优点:
代码简洁,高效处理数据集合。
缺点:
难以维护,如果代码注释不详尽、或者对 Stream 不熟悉,很难读懂,同时不利于代码调试。
如果有帮助的话,可以点个赞支持一下嘛
🙏