java中数组可通过arrays.stream()转stream并进行函数式操作:基本类型数组返回特化流(如intstream),引用类型数组返回stream;支持filter等链式操作,需调用foreach、collect等终止操作才执行;stream只能消费一次,基本类型数组不可用stream.of(),空数组安全,可并行处理。

Java 中数组可以通过 Arrays.stream() 转为 Stream,再使用 Stream API 进行流式遍历、过滤、映射等操作,既简洁又函数式。
基本转换:数组 → Stream
原始类型数组(如 int[])和引用类型数组(如 String[])需用不同方式转 Stream:
-
int[] arr = {1, 2, 3, 4, 5};→IntStream stream = Arrays.stream(arr); -
String[] strs = {"a", "bb", "ccc"};→Stream<string> stream = Arrays.stream(strs);</string>
注意:Arrays.stream() 对基本类型数组返回对应特化流(IntStream、LongStream、DoubleStream),对对象数组返回 Stream<t></t>。
常见过滤操作
使用 filter() 按条件筛选元素,支持链式调用:
- 整数数组中取偶数:
Arrays.stream(arr).filter(x -> x % 2 == 0).forEach(System.out::println); - 字符串数组中取长度大于 2 的项:
Arrays.stream(strs).filter(s -> s.length() > 2).forEach(System.out::println); - 组合多个条件(如非空且以 a 开头):
Arrays.stream(strs).filter(s -> s != null && s.startsWith("a"))
遍历与终止操作
Stream 是惰性的,必须调用终止操作才会真正执行。常用方式包括:
-
forEach():逐个消费,适合打印或简单处理(无返回值) -
collect(Collectors.toList()):收集结果为新集合 -
count()、findFirst()、anyMatch()等:获取统计或判断结果
例如:获取所有偶数并转成 List:List<integer> evens = Arrays.stream(arr).filter(x -> x % 2 == 0).boxed().collect(Collectors.toList());</integer>
(注意:int[] 的 IntStream 需用 boxed() 转为 Stream<integer></integer> 才能 collect 到泛型集合)
避免常见陷阱
实际使用时容易忽略的细节:
- Stream 只能消费一次,重复调用
forEach()会抛IllegalStateException - 基本类型数组不能直接用
Stream.of(arr)—— 这会把整个数组当作单个元素,应始终用Arrays.stream(arr) - 空数组调用
Arrays.stream()是安全的,返回空 Stream,不会 NPE - 若需并行处理,可用
Arrays.stream(arr).parallel(),但注意线程安全和副作用
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











