2016-02-26 76 views
0

我試圖找到一個創建無限paraller流的好方法。 現在我的代碼如下所示:生成無限並行流

Stream<List<Integer>> lists = 
       Stream.iterate(true, x -> true) 
         .parallel() 
         .map(x -> 
           IntStream.rangeClosed(1, population) 
             .boxed() 
             /* ... */ 
             .collect(toList())) 
         .limit(50_000); 

布爾X值是完全沒有意義的。 我居然會希望能夠做會是這個樣子僞代碼

Stream<List<Integer>> lists1 = 
      Stream.parallel().generate(() -> 
        IntStream.rangeClosed(1, population) 
          .boxed() 
          /* ... */ 
          .collect(toList())) 
        .limit(50_000); 

任何很好的提示是受歡迎的。由於

+1

你能不能用英語解釋你想做什麼?試圖解釋僞代碼會更清楚。 – Tunaki

+0

當您創建一個無限流以將其限制爲有限個計數時,您實際上只是以低效的方式創建有限流。這是特別浪費,因爲你要做同樣的事情5萬次。例如,不要並行地執行它,你應該考慮只執行一次*,例如使用'Collections.nCopies'的結果。 – Holger

回答

2

簡單:

List<List<Integer>> res = Stream.generate(() -> 
              // ... 
             ).parallel() 
           .limit(50_000) 
           .collect(toList()); 
+0

這是否也使並行()調用之前的所有執行並行? – Nabuska

+0

@Nabuska:'parallel()'的放置是完全不相關的。唯一重要的是它在那裏。然而,創建相同元素列表仍然是一種非常低效的方法... – Holger