Vavr 中 java.util.Collection 的懒惰视图
Lazy view of java.util.Collection in Vavr
我有一个现有的 api,它在返回值时使用 java.util.Collection
。我想在 Vavr 程序的后面部分使用这些值,但我不想使用像 List.ofAll
这样的急切方法(因为我不想遍历那些 Collection
对象两次)。我的用例是这样的:
List<Product> filter(java.util.Collection products) {
return List.lazyOf(products).filter(pred1);
}
可能吗?
vavr中有一个Lazyclass。您可能想使用它。
Lazy<Option<Integer>> val1 = Lazy.of(() -> 1).filter(i -> false);
由于该方法的输入集合是 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());
}
我有一个现有的 api,它在返回值时使用 java.util.Collection
。我想在 Vavr 程序的后面部分使用这些值,但我不想使用像 List.ofAll
这样的急切方法(因为我不想遍历那些 Collection
对象两次)。我的用例是这样的:
List<Product> filter(java.util.Collection products) {
return List.lazyOf(products).filter(pred1);
}
可能吗?
vavr中有一个Lazyclass。您可能想使用它。
Lazy<Option<Integer>> val1 = Lazy.of(() -> 1).filter(i -> false);
由于该方法的输入集合是 java Collection
,您不能依赖不变性,因此您需要立即处理集合中包含的值。您不能将其推迟到以后的时间点,因为不能保证传递的集合保持不变。
您可以通过对传递的集合的迭代进行过滤,然后将结果收集到 List
.
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());
}