2015-12-12 20 views
-2

據我所知,如果我有一個懶惰的流從一個列表(例如一個過濾器),檢查條件不會開始,直到我開始對流的迭代。懶惰的溪流在一瞬間全部被評估?

但是我想問 - 當我開始迭代時,迭代所有列表的流,檢查條件,並將所有結果放在「內部列表」中。在一瞬間,然後開始迭代並給出內部列表中的元素,或者當它開始迭代時,它將僅檢查第一個元素;並且在迭代期間它將檢查他的時間的每個元素。

另外我想問問它是否取決於它是否平行。我在這個網站上看到了多個問題,主題是「當惰性流迭代」,但不是這個特定的問題 - 如果它一次迭代是一點一點的,所以不要標記它重複,直到你看到if它是完全一樣的問題)

編輯3(編輯例子是明確的) - 例如:

ArrayList<Integer> list=new ArrayList<Integer>(); 
    for(int i=0;i<10000;i++) 
     list.add(i);//fill the list with integers 

    Iterator<Integer> iterator=list.stream().filter(j->j%2==0).iterator(); 

    iterator.next(); 

如果在最後一行將需要數時間找到的第一個元素或不。

+0

@dima我來自這個問題......有一般axplanation一般認爲,懶惰的流不會迭代,但不能解釋如果 - 當它迭代時 - 它在迭代過程中一次或一次迭代 –

+0

我想我不太明白你的問題。流不僅限於集合,它們是有限的 - 它們也可以來自無限的來源。你是問流可以提前終止還是在處理時提前退出? – Makoto

+0

@Makoto我問它如何與集合,如果所有的集合迭代一次,然後我得到任何元素,或者它只迭代一個元素 –

回答

0

您可以使用一點編碼輕鬆回答這樣的問題。嘗試這樣的例如:

List<Integer> ints = Arrays.asList(0,1,2,3,4,5,6,7,8,9,10) 
    .stream() 
    .peek(i -> System.out.println("Peek 1: " + i)) 
    .filter(i -> i < 10) 
    .peek(i -> System.out.println("Peek 2: " + i)) 
    .map (i -> String.valueOf(i)) 
    .peek(i -> System.out.println("Peek 3: " + i)) 
    .map (i -> Integer.parseInt(i)) 
    .peek(i -> System.out.println("Peek 4: " + i)) 
    .filter(i -> i < 10) 
    .peek(i -> System.out.println("Peek 5: " + i)) 
    .collect(Collectors.toList()); 

運行它,看看它是否有意義。

+0

好吧,我嘗試過這樣的事情,我覺得我的理解更好 –