亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何確保java 8流中的處理順序?

如何確保java 8流中的處理順序?

慕哥9229398 2019-07-26 15:14:43
如何確保java 8流中的處理順序?我想在XMLJava對象。我必須確保處理所有的元素,以便我收到它們。因此,我應該打電話給你嗎?sequential每一個stream我用?list.stream().sequential().filter().forEach()還是只要我不使用并行性,就只使用流就足夠了?list.stream().filter().forEach()
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

你問錯問題了。你在問sequentialv.V.parallel而您想要處理項有條不紊所以你得問問定序..如果你有有序流并執行保證保持順序的操作,無論流是并行處理還是順序處理,實現都將維持順序。

有序性不同于并行性和順序性。如果你打電話stream()在.上HashSet調用時,流將無序。stream()在.上List返回有序流。請注意,您可以調用unordered()釋放訂單合同,并可能提高性能。一旦流沒有排序,就無法重新建立排序。(將無序流轉換為有序流的唯一方法是調用sorted但是,產生的順序不一定是原始順序)。

另見“訂購”部分.的.java.util.stream包裝文件.

為了確保在整個流操作中對訂單進行維護,您必須研究流的源、所有中間操作和終端操作的文檔,以確定它們是否維持訂單(或者源最初是否有訂單)。

這可能是非常微妙的。Stream.iterate(T,UnaryOperator)創建有序流Stream.generate(Supplier)創建無序溪流。請注意,在您的問題中,您也犯了一個常見的錯誤:forEach 維持秩序。你必須用forEachOrdered如果要以保證的順序處理流的元素,請執行以下操作。

所以如果你list在你的問題中確實是java.util.List,其stream()方法將返回有序溪流filter不會改變訂單。所以如果你打電話list.stream().filter() .forEachOrdered(),則所有元素將按順序處理,而list.parallelStream().filter().forEachOrdered()可以并行地處理元素(例如,由過濾器處理),但仍將按順序調用終端操作(這顯然將減少并行執行的好處)。

例如,如果您使用以下操作

List<…> result=inputList.parallelStream().map(…).filter(…).collect(Collectors.toList());

整個操作可能從并行執行中受益,但結果列表將始終保持正確的順序,而不管您使用的是并行流還是順序流。




查看完整回答
反對 回復 2019-07-27
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊


list.stream().序貫().filter().forEach()

將始終按照列表本身的順序處理列表。

但是如果我們用

list.stream().并行()

那么其余的操作都不能保證訂單。



查看完整回答
反對 回復 2019-07-27
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

這取決于實際的集合類型。SetS通常不會,除非它是SortedSetLinkedHashSet..的集合視圖。Map (keySet()entrySet(),和values())繼承Map的策略,即當地圖是SortedMapLinkedHashMap..的行為是由報告的特征決定的。集合分配器..這個default執行Collection不報告ORDERED特征,所以它是無序的,除非被覆蓋。


查看完整回答
反對 回復 2019-07-27
  • 3 回答
  • 0 關注
  • 963 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號