1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
import java.util.*;
import java.util.stream.*;
public class StreamIntermediateOps {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// ========== 过滤 ==========
// filter:保留符合条件的元素
List<Integer> evens = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList()); // [2, 4, 6, 8, 10]
// distinct:去重(基于 equals/hashCode)
List<Integer> distinct = Arrays.asList(1, 2, 2, 3, 3, 3).stream()
.distinct()
.collect(Collectors.toList()); // [1, 2, 3]
// ========== 映射 ==========
// map:一对一转换
List<Integer> squares = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList()); // [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
// flatMap:一对多展开(扁平化)
List<List<Integer>> nested = Arrays.asList(
Arrays.asList(1, 2),
Arrays.asList(3, 4),
Arrays.asList(5, 6)
);
List<Integer> flat = nested.stream()
.flatMap(List::stream)
.collect(Collectors.toList()); // [1, 2, 3, 4, 5, 6]
// mapToInt 等:避免装箱
int sum = numbers.stream()
.mapToInt(Integer::intValue)
.sum();
// ========== 排序 ==========
// sorted():自然排序(元素需实现 Comparable)
List<String> sorted = Arrays.asList("banana", "apple", "cherry").stream()
.sorted()
.collect(Collectors.toList()); // [apple, banana, cherry]
// sorted(Comparator):自定义排序
List<String> reversed = Arrays.asList("a", "bb", "ccc").stream()
.sorted(Comparator.comparingInt(String::length).reversed())
.collect(Collectors.toList()); // [ccc, bb, a]
// ========== 截断与跳过 ==========
// limit:保留前 n 个
List<Integer> first3 = numbers.stream()
.limit(3)
.collect(Collectors.toList()); // [1, 2, 3]
// skip:跳过前 n 个
List<Integer> skip3 = numbers.stream()
.skip(3)
.collect(Collectors.toList()); // [4, 5, 6, 7, 8, 9, 10]
// 分页:skip + limit
int pageSize = 3;
int pageNum = 2; // 第2页
List<Integer> page = numbers.stream()
.skip((long) (pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList()); // [4, 5, 6]
// ========== 窥视(调试)==========
List<Integer> peeked = numbers.stream()
.filter(n -> n > 5)
.peek(n -> System.out.println("过滤后: " + n)) // 调试输出
.map(n -> n * 2)
.peek(n -> System.out.println("映射后: " + n))
.collect(Collectors.toList());
}
}
|