我有一個(gè)java.util.Collection返回值時(shí)使用的現(xiàn)有api 。我想在Vavr的程序的后面部分中使用這些值,但是我不想使用像這樣的急切方法List.ofAll(因?yàn)槲也幌隒ollection兩次遍歷那些對象)。我的用例是這樣的:List<Product> filter(java.util.Collection products) { return List.lazyOf(products).filter(pred1);}是否可以?
2 回答

德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
由于該方法的輸入集合是java Collection,因此您不能依賴于不變性,因此您需要立即處理集合中包含的值。您不能將其推遲到以后的某個(gè)時(shí)間點(diǎn),因?yàn)椴荒鼙WC所傳遞的集合保持不變。
您可以List通過對傳遞的集合的迭代進(jìn)行過濾,然后將結(jié)果收集到中,來最大程度地減少構(gòu)建的vavr的數(shù)量List。
import io.vavr.collection.Iterator;
import io.vavr.collection.List;
...
List<Product> filter(Collection<Product> products) {
return Iterator.ofAll(products)
.filter(pred1)
.collect(List.collector());
}

LEATH
TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
vavr中有一個(gè)惰性類。您可能要使用它。
Lazy<Option<Integer>> val1 = Lazy.of(() -> 1).filter(i -> false);
添加回答
舉報(bào)
0/150
提交
取消