java中stream流用法
时间: 2025-05-27 10:18:38 浏览: 13
### Java Stream API 使用教程及示例
#### 1. 基本概念
Java Stream API 是自 JDK 8 起引入的一项重要功能,用于处理集合数据的一种高效方式。它提供了一系列高级操作符,能够帮助开发者更方便地完成诸如过滤、映射、排序和聚合等复杂的数据处理任务[^2]。
Stream 并不是一个实际的数据结构,而是一个从支持数据操作的源(如 `Collection` 或数组)生成的对象序列。它可以被看作是对集合对象的功能增强工具,允许以声明式风格编写代码[^3]。
---
#### 2. 核心操作分类
Stream 的核心操作主要分为两大类:中间操作(Intermediate Operations)和终端操作(Terminal Operations)。
- **中间操作**不会立即执行,而是返回一个新的 Stream 对象,只有当终端操作触发时才会真正运行。常见的中间操作有 `filter()` 和 `map()` 等。
- **终端操作**会触发整个流水线的操作链并产生最终的结果。一旦调用了终端操作,Stream 就会被关闭且不能再使用。典型的终端操作包括 `forEach()`、`collect()` 和 `reduce()` 等[^1]。
---
#### 3. 示例代码展示
以下是几个常用的 Stream 流操作及其对应的代码实例:
##### (1) 过滤 (`filter`)
通过条件筛选出符合条件的元素:
```java
import java.util.Arrays;
import java.util.List;
public class FilterExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.filter(n -> n % 2 == 0) // 只保留偶数
.forEach(System.out::println); // 输出结果: 2, 4
}
}
```
##### (2) 映射 (`map`)
将每个输入元素转换成另一个形式或类型的输出:
```java
import java.util.Arrays;
import java.util.List;
public class MapExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream()
.map(name -> name.toUpperCase()) // 将名字转为大写
.forEach(System.out::println); // 输出结果: ALICE, BOB, CHARLIE
}
}
```
##### (3) 排序 (`sorted`)
按照自然顺序或者指定比较器对流中的元素进行排序:
```java
import java.util.Arrays;
import java.util.List;
public class SortedExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 7, 1, 9);
numbers.stream()
.sorted() // 默认升序排列
.forEach(System.out::print); // 输出结果: 13579
}
}
```
##### (4) 收集到集合 (`collect(Collectors.toList())`)
将流中的元素收集至目标容器中,比如列表或集合:
```java
import java.util.*;
import java.util.stream.Collectors;
public class CollectExample {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry");
Set<String> uniqueWords = words.stream()
.collect(Collectors.toSet()); // 转换为无重复项的集合
System.out.println(uniqueWords); // 输出可能为: [banana, cherry, apple]
}
}
```
##### (5) 归约 (`reduce`)
通过对所有元素应用二元运算得到单一值作为结果:
```java
import java.util.Arrays;
import java.util.List;
public class ReduceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, Integer::sum); // 计算总和
System.out.println(sum); // 输出结果: 15
}
}
```
---
#### 4. 总结
借助于 Java Stream API,可以显著提升集合数据处理的能力与效率。其设计哲学强调函数式的编程范式,使代码更加简洁明了的同时也增强了可读性和维护性[^3]。然而需要注意的是,在某些情况下过度依赖 Stream 可能会影响性能表现;因此合理评估具体应用场景非常重要。
---
阅读全文
相关推荐

















