国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 > Java > java教程 > 正文

Java中collect方法怎么用 掌握流結果收集的各種方式

下次還敢
發(fā)布: 2025-06-18 17:00:05
原創(chuàng)
456人瀏覽過

java的collect方法是stream api中的終結操作,用于將流元素收集到指定數(shù)據(jù)結構中。其核心在于supplier、accumulator和combiner三個參數(shù):1.supplier創(chuàng)建結果容器;2.accumulator將元素添加到容器;3.combiner合并多個容器結果。常用collectors類簡化操作,如tolist收集到list,toset去重收集到set,tomap構建映射,groupingby按條件分組(可嵌套下游收集器),joining連接字符串(支持分隔符、前綴、后綴),reducing執(zhí)行聚合計算(如求和)。掌握這些用法可高效處理集合數(shù)據(jù)。

Java中collect方法怎么用 掌握流結果收集的各種方式

Java的collect方法是Stream API中的一個終結操作,它允許你將流中的元素收集到一個集合、列表、映射或者任何其他你想要的數(shù)據(jù)結構中。簡單來說,它就是把流水線上的東西打包帶走,裝進你指定的容器里。

Java中collect方法怎么用 掌握流結果收集的各種方式

解決方案

Java中collect方法怎么用 掌握流結果收集的各種方式

collect方法的核心在于它的三個參數(shù):Supplier, Accumulator, 和 Combiner。

立即學習Java免費學習筆記(深入)”;

Java中collect方法怎么用 掌握流結果收集的各種方式
  • Supplier: 一個函數(shù),用來創(chuàng)建結果容器的初始實例。 可以理解為你要裝東西的那個“空箱子”。
  • Accumulator: 一個函數(shù),將流中的元素添加到結果容器中。 這就是把流水線上每個產(chǎn)品放到箱子里的操作。
  • Combiner: 一個函數(shù),用于合并多個部分結果容器(在并行流中)。 如果流水線分成了幾條線同時生產(chǎn),最后需要把幾個箱子里的東西合并成一個。

但大多數(shù)時候,我們不需要自己手動實現(xiàn)這三個參數(shù),而是使用Collectors類提供的靜態(tài)方法,它們已經(jīng)封裝好了常用的收集邏輯。

例如,將流收集到一個List:

List<String> names = Stream.of("Alice", "Bob", "Charlie")
                           .collect(Collectors.toList());
System.out.println(names); // 輸出: [Alice, Bob, Charlie]
登錄后復制

收集到一個Set:

Set<String> uniqueNames = Stream.of("Alice", "Bob", "Alice", "Charlie")
                               .collect(Collectors.toSet());
System.out.println(uniqueNames); // 輸出: [Alice, Bob, Charlie] (順序可能不同)
登錄后復制

收集到一個Map(需要指定key和value的映射):

Map<String, Integer> nameLengths = Stream.of("Alice", "Bob", "Charlie")
                                         .collect(Collectors.toMap(
                                                 name -> name,  // key
                                                 name -> name.length() // value
                                         ));
System.out.println(nameLengths); // 輸出: {Alice=5, Bob=3, Charlie=7}
登錄后復制

如何使用groupingBy進行分組?

groupingBy是Collectors中非常強大的一個方法,它允許你根據(jù)某個條件將流中的元素分組到不同的集合中。 可以理解為把流水線上的產(chǎn)品按照型號分別裝到不同的箱子里。

例如,按照字符串長度分組:

Map<Integer, List<String>> namesByLength = Stream.of("Alice", "Bob", "Charlie", "Dave")
                                                 .collect(Collectors.groupingBy(String::length));
System.out.println(namesByLength);
// 輸出: {3=[Bob, Dave], 5=[Alice], 7=[Charlie]}
登錄后復制

如果還想對每個分組的結果進行進一步的處理,可以使用groupingBy的第二個參數(shù),它接受另一個Collector作為下游收集器。 比如,計算每個長度的字符串的數(shù)量:

Map<Integer, Long> nameCountByLength = Stream.of("Alice", "Bob", "Charlie", "Dave")
                                               .collect(Collectors.groupingBy(
                                                       String::length,
                                                       Collectors.counting()
                                               ));
System.out.println(nameCountByLength); // 輸出: {3=2, 5=1, 7=1}
登錄后復制

joining方法有什么用?

joining方法用于將流中的字符串元素連接成一個字符串。 它接受三個可選參數(shù):分隔符、前綴和后綴。

String joinedNames = Stream.of("Alice", "Bob", "Charlie")
                             .collect(Collectors.joining(", "));
System.out.println(joinedNames); // 輸出: Alice, Bob, Charlie
登錄后復制

加入前綴和后綴:

String joinedNamesWithPrefixSuffix = Stream.of("Alice", "Bob", "Charlie")
                                             .collect(Collectors.joining(", ", "[", "]"));
System.out.println(joinedNamesWithPrefixSuffix); // 輸出: [Alice, Bob, Charlie]
登錄后復制

如何使用reducing進行聚合計算?

reducing方法用于對流中的元素進行聚合計算,比如求和、求平均值等。 它接受三個參數(shù):初始值、累加器和組合器。

例如,計算所有字符串的長度之和:

Integer totalLength = Stream.of("Alice", "Bob", "Charlie")
                            .collect(Collectors.reducing(
                                    0,  // 初始值
                                    String::length, // 累加器 (將字符串轉(zhuǎn)換為長度)
                                    Integer::sum // 組合器 (將兩個長度相加)
                            ));
System.out.println(totalLength); // 輸出: 15
登錄后復制

reducing還有更簡潔的重載形式,可以直接傳入一個二元操作符:

Optional<Integer> sum = Stream.of(1, 2, 3, 4, 5)
                               .collect(Collectors.reducing(Integer::sum));

System.out.println(sum.orElse(0)); // 輸出: 15
登錄后復制

注意這里返回的是Optional,因為如果流為空,則無法計算總和。

collect方法是Java Stream API中一個非常靈活和強大的工具,掌握它可以讓你更高效地處理集合數(shù)據(jù)。雖然一開始可能覺得參數(shù)有點多,但多用幾次就熟練了。

以上就是Java中collect方法怎么用 掌握流結果收集的各種方式的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!

最佳 Windows 性能的頂級免費優(yōu)化軟件
最佳 Windows 性能的頂級免費優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號