2016-10-10 49 views
2

最近我發現了一個在List.addAll中使用流的代碼片段,但我看不到它被使用的原因。Java List.addAll使用集合的流而不是使用集合本身?

所以給了一個簡單的列表。作爲參數傳遞給方法的List<E> subList。還有一個是一個字段,它包含相同類型的元素。 List<E> originalList.

以下是原始列表使用子列表的元素進行擴展的部分。

originalList.addAll(subList.stream().collect(Collectors.toList())) 

我沒有得到什麼:爲什麼用筆者這裏流而不是做以下:

originalList.addAll(subList) 

有沒有在這種情況下使用流的好處?

+5

流式版本將比非流式版本更溫暖數據中心。 –

+0

老實說,我發現它很奇怪,但由於我不熟悉溪流,我不想判斷任何人。 :) – melonT

+0

我會問作者。對我來說,有人試驗一種新方法的氣味,而不是對它有任何好處。列出缺點更容易;) –

回答

2

完全沒有區別,使用originalList.addAll(subList)將完全相同,因爲addAll()方法在內存中創建subList的陣列副本,並且不指向相同的引用。也許在Stream中有一些中間操作被清除了,作者忘記了清理代碼。

使用originalList.addAll(subList),因爲不需要創建流並將其收集到List,這只是不必要的操作。

2

事情是:,與「好lambda表達式」一起可以將具有比「老派」的循環方式更好的性能。但這很大程度上取決於您的背景(有關此主題的廣泛討論,請參見here)。

,當然還有,流的真正性能踢進場時,你有一些流()操作爲主;並通過將其更改爲parallelStream()開始並行處理。但是(當然也是):你仍然需要知道你在做什麼!並非所有事情都可以做到「平行」那麼簡單。

說說你正在展示的例子:在那裏使用流沒有任何好處。

+0

感謝您的回答和文章。 – melonT