在 Java 串流中 Collectors.toMap() 與 Collectors.groupingBy() 的比較

https://www.javacodegeeks.com/collectors-tomap-vs-collectors-groupingby-in-java-streams.html

Java Streams 提供了處理元素集合的強大方法。兩個常見操作涉及將流轉換為映射:Collectors.toMap() 和 Collectors.groupingBy()。儘管兩者都可以用於實現類似的結果,但它們滿足不同的情況,取決於我們希望如何結構我們的結果映射。本文將深入探討這些收集器之間的差異,並探索每個收集器何時更適用。

Collectors.toMap() 用於將流的元素收集到 Map 中,需要兩個函數:將每個元素映射到結果映射中的鍵的鍵映射函數和將每個元素映射到結果映射中的值的值映射函數。此外,它允許指定如何處理當兩個元素映射到相同鍵時的碰撞。

Collectors.groupingBy() 用於基於分類函數對流的元素進行分組,將元素分成組(由鍵表示),並將元素收集到一個映射中,其中每個鍵映射到一個元素列表。

使用 Collectors.toMap() 的情況包括希望將流元素直接映射到 Map,以及需要控制如何解決碰撞。使用 Collectors.groupingBy() 的情況包括需要根據某些準則對元素進行分類(例如按照長度分組單詞或按照屬性分組對象)以及希望多個元素映射到同一個鍵並將它們收集到列表或另一個集合中。

總之,Collectors.toMap() 適用於直接將流元素映射到 Map,而 Collectors.groupingBy() 適用於根據共同屬性或準則對元素進行分組,通常導致每個鍵映射到一個元素列表的映射。

via Java Code Geeks

June 27, 2024 at 04:55PM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *