Stream流的概念
Stream是Java 8引入的API,用于以声明式方式处理集合数据(如过滤、映射、排序等)。它允许高效、并行化的操作,无需显式编写循环代码。Stream不存储数据,而是通过操作管道(如filter、map)对数据源(集合、数组等)进行计算。
Stream流的特点
- 惰性求值:中间操作(如filter)不会立即执行,只有终端操作(如collect)触发时才会处理数据。
- 无存储:Stream本身不存储数据,仅代表数据源的视图。
- 函数式风格:支持链式调用,代码更简洁。
- 可并行化 :通过
parallel()方法轻松实现并行处理。
常用操作示例
创建Stream
java
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream(); // 从集合创建
Stream<Integer> nums = Stream.of(1, 2, 3); // 直接生成
中间操作
java
stream.filter(s -> s.startsWith("a")) // 过滤
.map(String::toUpperCase) // 映射
.sorted(); // 排序
终端操作
java
long count = stream.count(); // 计数
List<String> result = stream.collect(Collectors.toList()); // 收集为List
stream.forEach(System.out::println); // 遍历
并行流
通过parallelStream()或parallel()方法启用并行处理:
java
list.parallelStream().forEach(System.out::println); // 并行处理
注意事项
- Stream只能被消费一次,重复使用会抛出
IllegalStateException。 - 并行流需注意线程安全问题,避免共享可变状态。