2017-08-17 64 views
4

我想了解每個操作的分割器迭代的結果。請糾正我,如果我錯了:(我很可能是錯的):(我很可能是錯的)哪個集合 - 每個操作的分割器正在迭代?

  1. 每個流都有.spliterator()方法。
  2. 每個中間操作都可以改變分割器的特性。

我的問題:

  1. 是否每個中間操作使用和發生在同一spliterator characteristicts - 「源spliterator」?
  2. 如果我們使用filter操作,則可以忽略某些元素。那些元素究竟是從哪個集合中獲得的?
+2

你在說這裏的並行處理吧?分割器將從Stream的* source *創建 - List和Set *等;不用於中間操作。將會有許多分割器通過單一來源創建,它將對它進行分區(每個分割器獲得數據的一部分),以便將整個*流管道應用到該塊。你可能正在談論的是一個'Sink',它確實會捕獲'有狀態'操作的值,但不是無狀態操作的值,據我所知,在前一段時間看着代碼 – Eugene

+0

我已經在你的評論之後重新解釋了這個問題。另外我沒有提到並行處理,因爲我認爲它應該有相同的答案+ - 。 –

回答

3
  1. 是 - 它是相同的分割符。從Stream的源創建的只有一個單獨的分割器(在並行處理的情況下可能有多個Spliterator)。

  2. 這是結果集合(終端操作中的一個 - 可能根本不是集合 - sum,count等),該元素被省略。