问题标签 [spliterator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
200 浏览

java - 为什么 Spliterator 的 getExactSizeIfKnown() 不调用 hasCharacteristics()

在该类的源码(JDK 1.8.0_40)中Spliteratordefault实现getExactSizeIfKnown()检查被操作的实例是否具有SIZED特性,直接调用abstract characteristics()方法并检查它是否包含SIZED,而不是只调用调用hasCharacteristics(SIZED)方法,它有一个default实现几乎相同的事情。

是否有任何理由getExactSizeIfKnown()不实施为:

这对我来说读起来更清楚,并且似乎可以更好地处理覆盖默认行为(目前,如果hasCharacteristics(int)被覆盖为奇怪的东西,没有迹象表明getExactSizeIfKnown()可能也应该被覆盖)?

我在这里缺少什么吗?为什么要在这样的方法之间重复检查?

0 投票
2 回答
973 浏览

java - 如何限制 Stream 顺序运行,并防止它并行运行?

我有一个方法可以返回从自定义拆分器生成的流;分离器不安全。由于分离器不安全,并且它保持状态,我想防止它并行运行。有没有办法防止返回的流并行运行?

我找不到任何这样做的文档或示例。我确实sequential()在该类上找到了一个方法BaseStream,但这似乎并不能阻止用户随后调用parallel()以获取并行流。

0 投票
3 回答
2102 浏览

java - 如何为流式斐波那契数字实现拆分器?

我正在使用 Java 8 Spliterator并创建了一个以将斐波那契数流式传输到给定的 n。所以对于斐波那契数列0, 1, 1, 2, 3, 5, 8, ...

以下是我的实现,它在堆栈内存用完之前打印了一堆 1。你能帮我找出错误吗?(我认为它没有推进,currentIndex但我不确定将其设置为什么值)。

编辑1:如果您决定回答,请保持与问题相关。这个问题与有效的斐波那契数生成无关;这是关于学习拆分器的。

斐波那契分割器:

斐波那契对:

用法:

0 投票
2 回答
688 浏览

java - Java 8 Stream of Super Classes、Parent Files、Component Parents、链表等

我想将以下for语句转换为 Java 8 流(即Stream<Class<?>>)。理想的解决方案应该足够简单,以至于我可以轻松地将其调整为遍历链表的各种情况(例如File.getParentFile()Component.getParent())。

我意识到创建流的几行代码不会比单个for语句更简单。然而,流使for循环体更简单,因此流是可取的。

0 投票
3 回答
508 浏览

java - Why overload the varargs method of() in Java Stream interface?

The Stream interface has two overloads for the method of(). One of these is a variable-arity method while the other takes a single argument.

Is the single-argument method a performance optimization versus passing one argument to the variable-arity method? If so, how does it improve performance? The same questions could be asked of the empty() method, which would seem to be syntax sugar around the variable-arity of().

I see that the implementation differs between these methods, with the difference apparently being how the Spliterator is instantiated; but what advantage does this offer to the Stream API?

0 投票
1 回答
281 浏览

java - parallel() 的并发问题

我有一个问题,该代码每次运行时都不会返回相同的值。我认为这是因为它不是线程安全的,并且我在使用 parallel() 时遇到了一些并发问题。我曾尝试使用分离器,这很有效,但运行时因为差 3 倍,与顺序相同。我还能怎么做?

ps:traverseDirectory返回一个目录下所有.txt文件的BlockingQueue。

编辑 我忘了提到,我需要跟踪在哪一行找到了这个词!

0 投票
1 回答
429 浏览

java - 在 Spliterator 的 .tryAdance() 的实现中使动作 .accept() 超过一个元素是否有任何危险?

的 javadocSpliterator提到:

Spliterator 可以单独遍历元素(tryAdvance())或批量顺序遍历元素(forEachRemaining())。

然后我们转到javadoc,tryAdvance()其中说:

如果存在剩余元素,则对其执行给定的操作,返回 true;否则返回假。

也许我在某个地方误读了,但在我看来,如果剩下一个或多个Consumer元素,作为参数应该只.accept()在返回之前的每个参数true,并且如果说,我有两个参数立即可用,那么我不能:

这个项目中,我重写了广度优先拆分器,现在它显示为:

简而言之,我action接受所有参数,然后返回 false... 并且测试虽然很简单,但仍然成功(链接)。

请注意,.trySplit()总是返回null; 并且分离器具有特征DISTINCT和。ORDEREDNONNULL

那么,是否存在由于上述方法一次消耗所有元素而导致上述代码无法工作的流使用?

0 投票
2 回答
319 浏览

java - 无法在 Iterable 上迭代使用 Steam.spliterator 创建的流(第二次)

我无法迭代(第二次)用 Steam.spliterator 创建的流。我找不到相同的文档。

这是我正在做的事情:

我得到了一个Iterableas funciton 参数,我正在通过流迭代它,如下面的代码:

然后我又做了一次,但第二个根本不迭代。我花了很多时间调试它,最后在开始时将可迭代对象转换为列表。

有小伙伴知道原因吗?

编辑:对不起,如果我不清楚,

我没有多次使用流,而是使用相同的 Iterable 以上述方式生成流。

Iterable 是 MapReduce 作业中来自 reduce 的。

谢谢,哈伦德拉

0 投票
1 回答
272 浏览

java - Java 8 的 Spliterator 中使用的奇怪循环

java.util.Spliterator当循环体为空时,有谁知道为什么实现使用 do-while 而不是 while 循环?例如,实现forEachRemaining是:

他们为什么要使用

代替

?

有什么我不知道的优点吗?

0 投票
2 回答
2912 浏览

java - 如何创建通用分页拆分器?

我希望能够处理从必须在页面中访问的源读取的 java 流。作为第一种方法,我实现了一个分页迭代器,它仅在当前页面用完项目时请求页面,然后用于StreamSupport.stream(iterator, false)获取迭代器的流句柄。

因为我发现我的页面获取起来非常昂贵,所以我想通过并行流来访问页面。在这一点上,我发现由于 java 直接从迭代器提供的拆分器实现,我的幼稚方法提供的并行性是不存在的。因为我实际上对我想遍历的元素了解很多(我知道请求第一页后的总结果数,并且源支持偏移和限制)我认为应该可以实现我自己的拆分器来实现真正的并发性(在页面元素上完成的工作和页面查询中)。

我已经能够很容易地实现“在元素上完成的工作”并发,但在我最初的实现中,页面的查询只由最顶层的拆分器完成,因此不会从工作分工中受益由 fork-join 实现提供。

我怎样才能编写一个实现这两个目标的拆分器?

作为参考,我将提供到目前为止我所做的事情(我知道它没有适当地划分查询)。

还有我的网页来源:

还有一个页面:

以及获取具有“慢”分页以进行测试的流的示例