簡體   English   中英

Java Streams:替換 groupingBy 並減少 toMap

[英]Java Streams: Replacing groupingBy and reducing by toMap

我之前問過一個關於增強一些代碼的問題, 這里 @Holger給了我正確的回應,他說:

每當您發現自己使用帶有 groupingBy 的減少收集器時,您應該檢查 toMap 是否更合適

這似乎是一種模式! 他建議我做的事情很完美。

這是眾所周知的模式嗎? 為什么toMap比(在某些情況下)相結合更好groupingByreducing

通過使用這兩個收集器的經驗,這種模式變得明顯。 您會在 Stackoverflow 上找到幾個問答,其中任一收集器都可以解決問題,但其中一個似乎更適合特定任務。

這是ReductionMutable Reduction之間差異的變體。 在第一種情況下,我們在 Stream 上使用reduce ,在第二種情況下我們使用collect 當我們想對組應用可變歸約時,很自然地,以第二個Collector作為參數的groupingBy收集Collector是正確的工具。

不是很明顯,當我們想要執行經典的歸約時,采用合並函數的toMap收集器是正確的工具,因為該合並函數與歸約函數具有相同的形狀和目的,即使它沒有被這樣調用。

在實踐中,我們注意到執行 Reduction 的收集器返回一個Optional ,這在與groupingBy使用時通常是不需要的,這就是toMap在這些情況下工作更順暢的原因。

在使用這些 API 時,肯定會有更多模式變得明顯,但將它們收集到一個答案中並不是 Stackoverflow 的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM