java 8 stream api 使数组遍历更简洁函数式,一维基本类型数组需用boxed()转对象流,string数组可直接stream;支持foreach、过滤、映射等操作,但stream不可重用,且不适用于需频繁索引的场景。

Java 8 引入的 Stream API 让数组遍历更简洁、函数式,尤其适合一维数组(如 int[]、String[] 等)的处理。
将数组转为 Stream 再遍历
基本数组(如 int[]、double[]、long[])不能直接用 Arrays.stream(array) 得到 Stream<integer></integer>,而是得到对应原始类型流(IntStream、DoubleStream 等),需注意类型匹配。
-
String[] arr = {"a", "b", "c"};→Arrays.stream(arr).forEach(System.out::println); -
int[] nums = {1, 2, 3};→Arrays.stream(nums).forEach(System.out::println);(输出的是 int 值,不是 Integer 对象) - 若需装箱成对象流:用
Arrays.stream(nums).boxed().forEach(...)
常用遍历操作示例
Stream 提供多种终端操作,满足不同遍历需求:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
逐个消费:
forEach(System.out::println)—— 无序、不保证顺序(但数组流默认保持顺序) -
带索引遍历:Stream 本身不提供索引,可结合
IntStream.range(0, arr.length)实现:IntStream.range(0, arr.length).forEach(i -> System.out.println(i + ": " + arr[i])); -
过滤后遍历:
Arrays.stream(nums).filter(n -> n > 1).forEach(System.out::println); -
映射后遍历:
Arrays.stream(arr).map(String::toUpperCase).forEach(System.out::println);
注意事项与常见误区
Stream 是一次性使用的,遍历后不可重复调用;且原始类型流(如 IntStream)和引用类型流行为略有差异。
- 不能对同一个 Stream 多次调用
forEach(),会抛IllegalStateException -
Arrays.asList(int[])不会按预期工作(返回含单个数组元素的 List),切勿用于替代Arrays.stream() - 若需收集结果,用
collect(Collectors.toList())或toArray(),而非试图“遍历并修改原数组”——Stream 设计上是无副作用的
对比传统 for 循环
Stream 更侧重声明式表达“做什么”,而非“怎么做”。适合逻辑清晰、链式处理的场景;简单遍历或需频繁索引访问时,传统 for 或增强 for 可能更直观高效。
- 增强 for(推荐用于纯遍历):
for (String s : arr) { ... } - 传统 for(需索引或控制流程):
for (int i = 0; i - Stream 优势在组合操作:过滤、映射、排序、去重等一步到位
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










