我有兩個串列,我想將它們連接到一個串列中,然后使用Collectors.toMap它來洗掉基于某個欄位的重復項。同一個串列內不能有重復項,只能在串列之間。
在解決具有相同鍵的值的沖突時,我想優先考慮第一個串列中的專案。
我可以提供僅當引數在引數內部按順序傳遞(a, b) -> a但檔案不清楚的情況下才有效。mergeFunctionmergeFunctionCollectors.toMap
引數是否mergeFunction保證以與串列相同的順序傳遞?
uj5u.com熱心網友回復:
首先,流應該是有序的,但并非總是如此。
如果您正在創建流,假設連接從您的串列中生成的兩個流(將是ordered)Stream.concat(list1.stream(),list2.stream()),那么您的流將是ordered。
如果收集器toMap()使用有序流,那么它將尊重遭遇,除非您自己不通過應用來放松此約束unordered()。
這是來自API 檔案的參考:
訂購
流是否有遇到順序取決于源和中間操作。...
如果流是有序的,則大多數操作都被限制為按其遇到順序對元素進行操作。...
如果流是有序的,在相同的源上重復執行相同的流管道將產生相同的結果;如果沒有排序,重復執行可能會產生不同的結果。...
如果您偶然發現了“大多數操作”這個短語,那么您應該知道唯一可能不遵守流的遇到順序的操作是forEach()and peek()。
collect()操作確實尊重遇到順序(如果有的話),除非它通過提供指定特征的收集器應用于并行流Collector.Characteristics.UNORDERED(放松排序約束可能會提高并行運行時的性能)。
請注意, Collector 回傳的toMap()不是無序的,它指定的唯一特征是IDENTITY_FINISH。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518386.html
標籤:爪哇列表java流收藏家
上一篇:使用輸入點獲取二維串列值(C#)
