Vavr中的java.util.Collection的惰性视图

时间:2018-06-22 13:02:14

标签: java vavr

我有一个现有的api,在返回值时使用java.util.Collection。我想在Vavr的程序的后面部分中使用这些值,但是我不想使用像List.ofAll这样的急切方法(因为我不想遍历那些Collection对象两次)。我的用例是这样的:

List<Product> filter(java.util.Collection products) {
    return List.lazyOf(products).filter(pred1);
}

有可能吗?

2 个答案:

答案 0 :(得分:1)

由于该方法的输入集合是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());
}

答案 1 :(得分:0)

vavr中有一个here类。您可能要使用它。

Lazy<Option<Integer>> val1 = Lazy.of(() -> 1).filter(i -> false);