Java中的流与服务实现
一、Java流处理
1.1 流的基本概念
流是一系列数据元素,支持顺序和并行聚合操作。与Java中的集合不同,集合主要关注数据的存储和访问,而流专注于对数据的计算。流本身没有存储功能,其数据通常来自集合,也可以来自文件I/O通道、函数等,甚至可以基于能够生成无限数据元素的数据源。
1.2 流操作类型
流操作分为中间操作和终端操作:
- 中间操作 :对一个流进行操作后会产生另一个流,这个新流可以作为下一个中间操作的输入流。
- 终端操作 :产生一个单一值形式的结果。一旦调用了终端操作,流就不能再被重用。
部分流操作属于短路操作,即不需要处理流中的所有数据。例如, findAny
操作会查找流中满足指定谓词的任意元素,一旦找到元素,就会丢弃流中剩余的元素。
流具有惰性特性,数据在调用中间操作时不会被处理,只有调用终端操作时才会处理流数据。
1.3 顺序流与并行流
流可以是顺序流或并行流。顺序流的操作使用单线程串行处理,而并行流的操作使用多线程并行处理。大多数流API方法默认生成顺序流。以下是生成顺序流和并行流的示例代码:
// 顺序流处理
String names = Person
.persons() // 数据源
.stream() // 生成顺序流
.filter(