| 來源 | 方法 | 示例 |
| Collection | stream() / parallelStream() | list.stream() |
| 數組 | Arrays.stream() / Stream.of() | Stream.of(1,2,3) |
| BufferedReader | lines() | br.lines() |
| 靜態工廠 | IntStream.range() / Files.walk() | IntStream.range(1,10) |
| 其他 | Random.ints() / Pattern.splitAsStream() / JarFile.stream() | new Random().ints(5) |
四、操作分類:中間操作 vs 終端操作
中間操作 —— 惰性、可鏈接、返回新 Stream
filter(Predicate):篩選
map(Function):轉換
sorted() / sorted(Comparator):排序
distinct():去重
limit(n) / skip(n):截取/跳過
peek(Consumer):側效調試(不修改元素)
終端操作 —— 觸發遍歷、產生結果、消費 Stream
forEach(Consumer):遍歷消費
collect(Collector):歸約為集合/Map/字符串
toArray():轉數組
reduce():聚合(求和、拼接、最值)
count() / min() / max():統計
anyMatch/allMatch/noneMatch:匹配判斷
findFirst/findAny:查找
五、核心 API 實戰速查
1. 創建與收集
// 數組 -> Stream -> List
Integer[] arr = {1,2,3,4,5,6,7,8,9};
List<Integer> evens = Arrays.stream(arr)
.filter(i -> i % 2 == 0)
.collect(Collectors.toList()); // [2,4,6,8]
// Stream -> 數組
Integer[] evenArr = evens.stream().toArray(Integer[]::new);
2. 篩選、轉換、排序
List<String> names = Arrays.asList("Amitabh","Shekhar","Aman","Rahul");
names.stream()
.filter(s -> s.startsWith("A"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println); // AMAN, AMITABH
3. 匹配與統計
boolean anyA = names.stream().anyMatch(s -> s.startsWith("A")); // true
long countA = names.stream().filter(s -> s.startsWith("A")).count(); // 2
4. reduce 聚合(字符串拼接/求和/最值)
5. 短路操作(提前終止)
s.startsWith("L"))
.findFirst().orElse("N/A"); // Lokesh
六、並行流:零成本多核加速
List<String> strings = Arrays.asList("abc","111","bc","efg","12584","","1254");
// Java 7 命令式
long count7 = 0;
for (String s : strings) if (s.length() == 3) count7++;
// Java 8 聲明式
long count8 = strings.stream().filter(s -> s.length() == 3).count();
// 兩者結果均為 3
八、最佳實踐建議
- 優先使用方法引用(
String::toUpperCase)提升可讀性
- 避免在 Stream 中修改共享狀態,保持純函數特性
- 大數據量、CPU 密集型才考慮
parallelStream()
- 收集器靈活運用:
Collectors.groupingBy、partitioningBy、joining、summarizingInt
- 調試技巧:插入
.peek(System.out::println) 觀察中間流狀態
九、參考資源
- 上一篇文章: Hibernate 入門:核心概念與 HelloWorld 完整實戰
- 下一篇文章: Java 計算兩日期間工作日(排除周末與法定節假日)工具類實現
Copyright ©
程式碼之家 All Rights Reserved