java stream操作
Java Stream 操作详解:从基础到实战
Java Stream(流)是 Java 8 引入的核心特性,基于函数式编程思想,为集合数据处理提供了简洁、高效的链式操作。Stream 不存储数据,也不修改源集合,而是通过一系列中间操作(惰性求值)和终止操作(触发执行),实现对数据的过滤、转换、聚合等处理。本文将全面解析 Stream 的核心概念、操作方法及最佳实践。
Stream 核心概念
什么是 Stream?
Stream 是 “数据流” 的抽象,可将集合(如 List、Set)转换为流,通过链式操作对元素进行处理。其核心特点:
- 不存储数据:流只是数据的 “视图”,操作不会改变源集合。
- 惰性求值:中间操作仅描述处理逻辑,不实际执行,直到终止操作被调用才一次性执行。
- 一次性使用:流只能被消费一次,执行终止操作后即失效,再次使用需重新创建。
Stream 操作流程
Stream 处理分为三个阶段,形成 “流水线”:
数据源(集合、数组等)→ 中间操作(过滤、转换等)→ 终止操作(聚合、收集等)
- 数据源:可是
Collection(通过stream()或parallelStream())、数组(Arrays.stream())、生成器(Stream.generate())等。 - 中间操作:对数据进行处理(如筛选、排序),返回新的流,可链式调用。
- 终止操作:触发流的执行,返回非流结果(如集合、数值、布尔值等)。
Stream 的创建(生成流)
从集合创建
所有 Collection 接口的实现类(如 List、Set)均可通过 stream() 或 parallelStream() 生成流:
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream(); // 顺序流(单线程处理)
Stream<String> parallelStream = list.parallelStream(); // 并行流(多线程处理)
从数组创建
通过 Arrays.stream() 从数组生成流: