Stream进行中间操作的详细解释
时间: 2024-02-25 08:57:16 浏览: 15
Java 8中的Stream提供了多种中间操作(Intermediate Operations),这些操作都是返回一个新的Stream对象,可以链式调用多个中间操作。下面介绍一下常用的中间操作:
1. `filter(Predicate<T> predicate)`: 过滤Stream中的元素,保留符合条件的元素。
```java
List<String> list = Arrays.asList("apple", "banana", "orange", "watermelon", "pear");
list.stream()
.filter(s -> s.length() > 5) // 只保留长度大于5的元素
.forEach(System.out::println);
```
2. `map(Function<T, R> mapper)`: 对Stream中的元素进行映射,生成一个新的Stream。
```java
List<String> list = Arrays.asList("apple", "banana", "orange", "watermelon", "pear");
list.stream()
.map(String::toUpperCase) // 将元素转换成大写形式
.forEach(System.out::println);
```
3. `flatMap(Function<T, Stream<R>> mapper)`: 对Stream中的元素进行映射,生成一个新的Stream,然后将多个Stream合并成一个Stream。
```java
List<List<Integer>> lists = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4, 5), Arrays.asList(6, 7, 8, 9));
lists.stream()
.flatMap(List::stream) // 将多个List合并成一个Stream
.forEach(System.out::println);
```
4. `distinct()`: 去除Stream中重复的元素。
```java
List<Integer> list = Arrays.asList(1, 2, 3, 2, 1, 4, 5, 4);
list.stream()
.distinct() // 去除重复元素
.forEach(System.out::println);
```
5. `sorted()`: 对Stream中的元素进行排序。
```java
List<Integer> list = Arrays.asList(5, 2, 8, 1, 9, 3, 6);
list.stream()
.sorted() // 对元素进行自然排序
.forEach(System.out::println);
```
6. `limit(long maxSize)`: 限制Stream中元素的数量。
```java
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
list.stream()
.limit(5) // 只取前5个元素
.forEach(System.out::println);
```
7. `skip(long n)`: 跳过Stream中的前n个元素。
```java
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
list.stream()
.skip(5) // 跳过前5个元素
.forEach(System.out::println);
```
中间操作可以组合使用,例如:
```java
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
list.stream()
.filter(n -> n % 2 == 0) // 过滤出偶数
.map(n -> n * n) // 对偶数进行平方
.sorted() // 对结果进行排序
.forEach(System.out::println);
```
上面的代码首先过滤出偶数,然后对偶数进行平方,最后对结果进行排序并打印出来。