2 回答

TA貢獻1719條經驗 獲得超6個贊
collect
是終端操作,因此必須對其進行評估。
使用 終止Stream
管道時collect(Collectors.toList())
,您將始終獲得輸出List
(您永遠不會獲得null
)。如果Stream
是空的(由于流的源為空,或者由于在終端操作之前過濾掉了流的所有元素,它是否為空并不重要),輸出List
也將為空。

TA貢獻1794條經驗 獲得超8個贊
你會得到一個空集合。正如收集在文檔中解釋的那樣:
使用收集器對此流的元素執行可變歸約操作。
和可變減少:
可變歸約操作在處理流中的元素時將輸入元素累積到可變結果容器中,例如 Collection 或 StringBuilder。
由于原始輸入為空或由于過濾器操作,您將獲得一個空集合。
感謝@Andy Turner 的提示。
事實是 toList() 累積到一個新列表中,這意味著它不會返回 null。
并且文檔得到了 Collectors.toList() 的解釋:
返回將輸入元素累積到新列表中的收集器。
我們可以從源碼中得到
public static <T>
Collector<T, ?, List<T>> toList() {
return new CollectorImpl<>((Supplier<List<T>>) ArrayList::new, List::add,
(left, right) -> { left.addAll(right); return left; },
CH_ID);
}
它永遠不會產生空輸出,但您仍然可以使用自定義收集器獲得空值,如 Andy 所示。
添加回答
舉報