10
如何才能流暢地創建流?在基於收集代碼遷移我遇到了這種模式多次:懶洋洋地創建流
Collection collection = veryExpensiveCollectionCreation();
return Stream.concat(firstStream, collection.stream());
產生的級聯流一般懶洋洋地處理,因爲我們知道。因此,如果流處理在串聯流的第一部分中停止,則根本不需要昂貴的集合。
所以出於性能方面的原因,我想推遲創建整個集合,直到連接流實際嘗試迭代連接的第二部分的元素。
僞代碼看起來像
return Stream.concat(firstStream, new LazyStreamProvider() {
Stream<Something> createStream() {
return veryExpensiveCollectionCreation().stream();
}
);
編輯:我知道重構的收集創作到流將是最好的,讓所有的API的流察覺。但是,在這種情況下,這是另一個具有不可修改API的組件的一部分。
可以修改veryExpensiveCollectionCreation(的'體)'或者只是超負荷它返回一個'Stream'? – Mena
可以修改'veryExpensiveCollectionCreation()'來返回一個惰性流而不是嚴格的集合嗎? – puhlen