详解java中的stream流
时间: 2025-07-04 12:52:41 浏览: 1
### Java Stream流的详细用法和概念
Java Stream(流)是Java 8引入的一个强大的功能,用于处理集合数据。Stream API提供了一种声明式的方式对数据进行过滤、转换、聚合等操作,使得代码更加简洁、可读性更高。
#### 1. Stream的概念
Stream是一个来自数据源的元素序列,支持顺序和并行聚合操作[^2]。它不是一种数据结构,而是对数据源(如Collection、数组或I/O通道)的一种抽象表示。Stream本身不存储数据,也不改变数据源的内容,而是通过一系列中间操作和终端操作来生成结果。
- **数据源**:Stream可以从各种来源创建,例如`Collection`、数组、文件或生成器函数。
- **中间操作**:这些操作返回一个新的Stream,并可以链式调用。常见的中间操作包括`filter`、`map`、`sorted`等。
- **终端操作**:这些操作会触发Stream的执行,并产生一个非Stream的结果(如`List`、`int`等)。常见的终端操作包括`forEach`、`collect`、`reduce`等。
#### 2. Stream的创建方式
以下是几种常见的创建Stream的方式:
- 从`Collection`创建:
```java
List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<String> stream = list.stream();
```
- 从数组创建:
```java
String[] fruits = {"apple", "banana", "orange"};
Stream<String> stream = Arrays.stream(fruits);
```
- 使用`Stream.of`:
```java
Stream<String> stream = Stream.of("apple", "banana", "orange");
```
- 从文件中创建:
```java
try (Stream<String> stream = Files.lines(Paths.get("file.txt"), StandardCharsets.UTF_8)) {
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
```
#### 3. Stream的常见操作
以下是一些常用的Stream操作及其示例:
- **过滤(Filter)**:筛选出满足条件的元素。
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
```
- **映射(Map)**:将每个元素转换为另一个形式。
```java
List<String> words = Arrays.asList("hello", "world");
List<Integer> lengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
```
- **排序(Sorted)**:对元素进行排序。
```java
List<Integer> sortedNumbers = numbers.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
```
- **归约(Reduce)**:将Stream中的元素合并为一个值。
```java
Optional<Integer> sum = numbers.stream()
.reduce((a, b) -> a + b);
```
- **收集(Collect)**:将Stream中的元素收集到一个集合中。
```java
Set<String> uniqueWords = words.stream()
.collect(Collectors.toSet());
```
#### 4. 并行Stream
对于大规模数据处理,Stream API提供了并行处理的能力。通过调用`parallelStream()`方法,可以启用并行流,从而利用多核处理器的优势。
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int sum = numbers.parallelStream()
.mapToInt(Integer::intValue)
.sum();
```
#### 5. 使用场景
Stream API适用于以下场景:
- 对集合进行过滤、转换、排序等操作时,Stream API可以提供简洁的解决方案[^1]。
- 在需要并行处理大规模数据集合时,Stream API能够显著提升性能[^2]。
- 当需要以声明式风格编写代码时,Stream API可以使代码更易读、更易于维护。
### 示例代码
以下是一个完整的Stream API使用示例:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "orange", "grape");
// 过滤长度大于5的单词,并将其转换为大写
List<String> result = words.stream()
.filter(word -> word.length() > 5)
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(result); // 输出: [BANANA, ORANGE]
}
}
```
阅读全文
相关推荐
















