为什么你需要反思才能变得懒惰?例如,考虑这个类:
class LazySeq<T> {
private final List<T> list;
private Predicate<? super T> predicate;
public LazySeq(List<T> input) {
this.list = new ArrayList<>(input);
}
//Here you just store the predicate, but you don't perform a filtering
//You could also return a new LazySeq with a new state
public LazySeq<T> filter(Predicate<? super T> predicate) {
this.predicate = predicate;
return this;
}
public void forEach(Consumer<? super T> consumer){
if(predicate == null) {
list.forEach(consumer);
} else {
for(T elem : list) {
if(predicate.test(elem)) {
consumer.accept(elem);
}
}
}
}
}
在惰性seq上调用filter
时,筛选不会立即发生,例如:
LazySeq<Integer> lazySeq = new LazySeq<>(Arrays.asList(1, 2, 3, 4));
lazySeq = lazySeq.filter(i -> i%2 == 0);
如果在调用filter之后看到序列的内容,您将看到它总是1,2,3,4
。但是,当调用终端操作(如foreach
)时,筛选将在使用使用者之前完成。例如:
lazySeq.filter(i -> i%2 == 0).forEach(System.out::println);
我正在尝试实现一个流,该流在其实现中使用自身的另一个实例。流前面有几个常量元素(使用IntStream.concat),所以只要连接的流懒散地创建非常量部分,这就可以工作。我想使用StreamSupport。intStream重载使用intStream获取供应商。concat(它“创建一个懒散连接的流”)应该足够懒惰,只在需要元素时创建第二个拆分器,但即使创建流(而不是计算流)也会溢出堆栈。我如何
我正在寻找一种用Java8流模拟以下行为的方法。给定一个年份流,对它们进行排序,以便输出前10个值,这样,在输出一年之后,该值将减少,并且迭代重新开始再一次resorting: 如果我输入2005年、2020年、2000年、1967年和2018年,我期望以10为限得出以下结果: 我使用的测试是: 但看起来sorted()一点也不懒。整个排序在beggining处完成一次,因此在任何进一步操作之前要
我了解java streams,并尝试实现map、filter、fold(使用自定义函数作为参数),包括严格的和惰性的计算方法。 然而,我无法在java中实现flatmap的惰性实现。Normal map、filter、fold只是在主迭代器(如果是它的列表)上运行的组合函数,如果传入值为null,则丢弃函数的apply。 但是flatMap输入函数会生成另一个列表(流),需要将其展平, lazy
问题内容: 考虑以下代码: 当第一个URL够用时会被要求输入第二个URL吗? 我尝试了一个较小的示例,它看起来像预期的那样工作。即一个一个地处理数据,但是可以依靠这种行为吗?如果没有,在帮助之前打电话吗? 输出: 更新 :如果对实施很重要,请使用官方Oracle JDK8 答案 :根据下面的评论和答案,flatmap部分是惰性的。即完全读取第一个流,并且仅在需要时才读取下一个。渴望读取一个流,但是
问题内容: 我的问题很简单,如何使这段代码变得懒惰: 上面的代码可以计算组合,但是可以在内存中创建整个数组数组。我需要让它返回类似的东西,除了Swift类型系统不允许我做一些通用的事情。 有什么想法如何实现这一目标并保持功能风格吗? 附注:我确实想过用生成器解决这个问题并跟踪索引的另一种方法,但是我不想跟踪任何状态,我想要一个纯函数式(如FP中)的解决方案。Haskell默认情况下会这样做,顺便说
问题内容: 我想一次从Python的文件/流中读取多个JSON对象。不幸的是刚刚s,至文件结束-; 似乎没有任何方法可以使用它来读取单个对象或延迟迭代这些对象。 有什么办法吗?使用标准库将是理想的选择,但是如果有第三方库,我会改用它。 目前,我将每个对象放在单独的行上并使用,但我真的不希望这样做。 使用范例 example.py in.txt 示例会话 问题答案: 这是一个非常简单的解决方案。秘诀