gpt4 book ai didi

java - java 10中的Lazy flatMap实现算法

转载 作者:行者123 更新时间:2023-12-02 07:32:07 25 4
gpt4 key购买 nike

我了解java流,并尝试实现map,filter,fold(以自定义函数作为参数),严格和惰性评估方式。

但是我无法在java中实现平面 map 的惰性实现。法线贴图、过滤器、折叠只是在主迭代器(如果其列表)上运行的组合函数,如果传入值为 null,则函数的应用将被丢弃。

然而,flatMap 输入函数会生成另一个需要展平的列表(流),

lazy flatMap 在 java 10 中是如何实现的?有没有关于算法的文档?

谢谢。

最佳答案

如果你想实现惰性flatMap,最重要的部分是提供Iterator的正确实现。这个实现可以如下所示:

final class FlatMappedIterator<A, B> implements Iterator<B> {
private final Iterator<A> iterator;
private final Function<A, Iterable<B>> f;
private Iterator<B> targetIterator; // Iterator after applying `f` to element of type A

FlatMappedIterator(Iterator<A> iterator, Function<A, Iterable<B>> f) {
this.iterator = iterator;
this.f = f;
}

@Override
public boolean hasNext() {
if (targetIterator != null && targetIterator.hasNext()) {
return true;
} else if (iterator.hasNext()) {
A next = iterator.next();
Iterable<B> targetIterable = f.apply(next);
targetIterator = targetIterable.iterator();
return targetIterator.hasNext();
} else {
return false;
}
}

@Override
public B next() {
if (hasNext()) {
return targetIterator.next();
} else {
throw new NoSuchElementException();
}
}
}

因此下一个元素的检索被推迟到调用 hasNextnext 时。

然后您需要实现 flatMap 函数本身。但这很容易。我将其作为练习留给读者:)

关于java - java 10中的Lazy flatMap实现算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52330047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com