我有一个java.util.Collection返回值时使用的现有api 。我想在Vavr的程序的后面部分中使用这些值,但是我不想使用像这样的急切方法List.ofAll(因为我不想Collection两次遍历那些对象)。我的用例是这样的:List<Product> filter(java.util.Collection products) { return List.lazyOf(products).filter(pred1);}是否可以?
2 回答

德玛西亚99
TA贡献1770条经验 获得超3个赞
由于该方法的输入集合是java Collection,因此您不能依赖于不变性,因此您需要立即处理集合中包含的值。您不能将其推迟到以后的某个时间点,因为不能保证所传递的集合保持不变。
您可以List通过对传递的集合的迭代进行过滤,然后将结果收集到中,来最大程度地减少构建的vavr的数量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贡献1936条经验 获得超7个赞
vavr中有一个惰性类。您可能要使用它。
Lazy<Option<Integer>> val1 = Lazy.of(() -> 1).filter(i -> false);
添加回答
举报
0/150
提交
取消