簡體   English   中英

Java 8 Streams,部分工作作為並行流,另一部分作為順序流

[英]Java 8 Streams, perform part of the work as parallel stream and the other as sequential stream

我有一個流並行執行一系列操作,然后我必須將結果寫入文件,所以我需要寫入操作是順序的,但是它需要作為一個流來執行,我有很多數據要寫入,我不能使用中間集合。 有沒有辦法做到這一點?

我想到了一個看起來不太干凈的解決方案,那就是讓寫法同步。 這種方法是唯一可能的嗎? 還有其他方法嗎?

謝謝你。

無需將Stream順序來執行順序終端操作。 例如,參見Stream.forEachOrdered的文檔:

此操作一次處理一個元素,如果存在,則按遇到順序處理。 對一個元素執行操作發生在對后續元素執行操作之前,但對於任何給定元素,該操作可以在庫選擇的任何線程中執行。

換句話說,由於前面步驟的並行處理,動作可能會被不同的線程調用,但它保證是線程安全的,不會並發調用動作,如果流被排序,甚至會保持順序。

因此,如果您使用forEachOrdered將寫入文件指定為終端操作,則無需進行任何額外的同步。

類似的保證適用於有關某些功能的其他終端操作。 研究特定操作的文檔並了解做出了哪些保證以及未指定的內容至關重要。

暫無
暫無

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

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