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

Vavr中java.util.Collection的惰性视图,java,vavr,Java,Vavr,我有一个现有的api,它在返回值时使用java.util.Collection。我想在我的Vavr程序的后面部分使用这些值,但我不想使用所有对象中的渴望方法,如List.of(因为我不想遍历那些集合对象两次)。我的用例是这样的: List<Product> filter(java.util.Collection products) { return List.lazyOf(products).filter(pred1); } 列表过滤器(java.util.Collecti

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

List<Product> filter(java.util.Collection products) {
    return List.lazyOf(products).filter(pred1);
}
列表过滤器(java.util.Collection产品){
退货清单.lazyOf(产品).过滤器(pred1);
}
可能吗?

vavr中有一个类。你可能想用它

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

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

通过对传递的集合进行迭代过滤,然后将结果收集到一个
列表中,您可以最小化生成的vavr
列表的数量

import io.vavr.collection.Iterator;
导入io.vavr.collection.List;
...
列表过滤器(收集产品){
返回所有(产品)的迭代器
.过滤器(pred1)
.collect(List.collector());
}

我不清楚这个问题。你到底在担心什么?你所说的干扰不变性的整个概念是什么意思?举个例子。这个“列表”只会被使用/遍历一次吗?如果是,您希望返回
。您的流可以包含一个
过滤器(…)
。在调用方对流使用终端操作之前,流不会被遍历。正如我所说,我想在程序的后面部分使用Vavr列表,因此简单地使用Java流api并不是我真正想要的。我的目标是避免(急切地)从products集合创建Vavr列表的开销。我认为过滤器会以任何一种方式创建一个新列表,因此列表的初始复制(by list.ofAll)是不必要的(从我的角度来看,但从Vavr的角度来看,可能不是这样)。在这里使用Lazy只会生成一个以列表为元素的值。筛选器将作为参数而不是其元素接收整个列表。(()->array.asList(“a”、“b”、“c”)).forEach(e->System.out.println(e));这正是我要找的。我认为他们应该在文档的互操作性章节中提到这一点。谢谢