3

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

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

可能吗?

4

2 回答 2

2

由于该方法的输入集合是 java Collection,因此您不能依赖不变性,因此您需要立即处理集合中包含的值。您不能将其推迟到以后的时间点,因为不能保证传递的集合保持不变。

List您可以通过对传递的集合的迭代进行过滤,然后将结果收集到 a来最小化构建的 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());
}
于 2018-06-22T16:58:54.793 回答
0

vavr 中有一个Lazy类。您可能想使用它。

Lazy<Option<Integer>> val1 = Lazy.of(() -> 1).filter(i -> false);
于 2018-06-22T14:26:16.017 回答