java stream api是java 8引入的声明式集合处理工具,不存储数据、不修改原集合,通过惰性求值的流水线操作(如filter、map、collect)实现高可读性、链式调用与并行加速。

Java Stream API 是 Java 8 引入的声明式集合处理工具,它不改变原始数据,也不存储数据,而是构建一条“操作流水线”,让开发者专注描述“要做什么”,而非“如何一步步做”。它的核心价值在于可读性高、链式清晰、支持惰性求值和并行加速。
流的创建方式要匹配数据源
Stream 不是容器,不能直接 new,必须从已有数据源构造:
- 集合类(List、Set、Map)调用 .stream() 或 .parallelStream()
- 数组用 Arrays.stream(array),基本类型数组推荐用 IntStream/LongStream.of()
- 静态工厂方法:如 Stream.of("a", "b", "c")、Stream.generate(() -> Math.random()).limit(10)
- 文件或 I/O 流可通过 Files.lines(path) 获取 Stream
中间操作是惰性管道,不触发执行
每个中间操作(如 filter、map、sorted)都返回新 Stream,但只是登记操作,不会立刻处理数据。只有遇到终端操作时,整条流水线才从头开始执行一次。
-
filter(Predicate):保留满足条件的元素,比如
.filter(s -> s.length() > 2) -
map(Function):一对一转换,如
.map(String::toUpperCase) -
flatMap(Function
>) :适合处理嵌套结构,比如把 List- > 拍平为 Stream
- distinct() / sorted() / limit(n) / skip(n):去重、排序、截断、跳过,均返回新流
终端操作触发计算并消耗流
一个 Stream 只能被消费一次。调用终端操作后,流即关闭,再次使用会抛出 IllegalStateException。
-
collect(Collectors.toList()):最常用,生成新集合;也可用
Collectors.toSet()、Collectors.groupingBy()等高级收集器 - forEach(Consumer):执行副作用(如打印、写日志),不返回结果
- count() / max(Comparator) / min(Comparator) / findFirst():返回 Optional 或基础类型结果
- anyMatch() / allMatch() / noneMatch():布尔判断,常用于校验逻辑
并行流不是万能加速器
调用 .parallel() 后,Stream 底层使用 ForkJoinPool.commonPool 分割任务。但它只在 CPU 密集型、数据量大、无状态操作时才有明显收益。
- 避免在中间操作中修改共享变量,否则引发线程安全问题
- 小数据集(如百条以内)开启并行反而因调度开销变慢
- I/O 操作、阻塞调用、有状态 lambda(如累加器)不适合并行流
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











