一、流的创建
流可以从多种数据源创建,包括集合、数组、I/O资源等:
java
// 从集合创建
List list = Arrays.asList(1, 2, 3);
Stream stream = list.stream();
// 从数组创建
int[] array = {1, 2, 3};
IntStream intStream = Arrays.stream(array);
// 通过Stream.of创建
Stream stringStream = Stream.of("A", "B", "C");
二、中间操作(Intermediate Operations)
中间操作返回新流,支持链式调用,但不会立即执行:
过滤(Filter)
筛选符合条件的元素:
java
list.stream().filter(n -> n % 2 == 0); // 筛选偶数
映射(Map)
转换元素类型或提取属性:
java
list.stream().map(String::toUpperCase); // 字符串转大写
排序(Sorted)
按自然顺序或自定义比较器排序:
java
list.stream().sorted(Comparator.reverseOrder()); // 降序排列
去重(Distinct)
去除重复元素:
java
list.stream().distinct();
截取与跳过(Limit/Skip)
java
list.stream().limit(5); // 取前5个元素
list.stream().skip(2); // 跳过前2个元素
三、终止操作(Terminal Operations)
终止操作触发流的执行并返回结果:
收集结果(Collect)
将流转换为集合或聚合数据:
java
List names = list.stream()
.filter(s -> s.startsWith("A"))
.collect(Collectors.toList());
遍历(ForEach)
对每个元素执行操作:
java
list.stream().forEach(System.out::println);
统计(Count/Sum/Max/Min)
java
long count = list.stream().count(); // 元素总数
int sum = list.stream().mapToInt(Integer::intValue).sum(); // 求和
归约(Reduce)
自定义聚合逻辑:
java
int sum = list.stream().reduce(0, Integer::sum); // 累加求和
四、并行流(Parallel Stream)
通过并行处理提升大数据集性能:
java
int sum = list.parallelStream()
.mapToInt(n -> n * n)
.sum(); // 并行计算平方和
注意:并行流适用于计算密集型任务,但可能因线程开销导致小数据集效率降低。
五、注意事项
流的不可复用性
流一旦被终止操作消费,不可重复使用。
惰性求值
中间操作延迟执行,直到终止操作触发。
避免副作用
推荐使用纯函数式操作,而非在流中修改外部变量。