问题标签 [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 投票
2 回答
18326 浏览

parallel-processing - Java8中迭代器和拆分器的区别

我在学习时才知道这ParallelismSpliterator.

这可能是一个基本问题,但任何人都可以向我解释和之间的主要区别Iterator并举Spliterator一些例子吗?

0 投票
2 回答
441 浏览

java-8 - 如何使用拆分器修改集合的元素

经过大量搜索,我发现唯一支持的操作Spliterator是从 READ 元素中读取元素Collection

有人可以告诉我 CRUD 中可以支持的另一个操作Spliterator。我尝试Collection使用 a修改元素,Spliterator但没有成功:

0 投票
2 回答
236 浏览

c# - C# 中的 Spliterator 等价物是什么?

在 Java 中,我可以编写一个Spliterator接口实现,在其中我可以指定源集合将如何精确地拆分为子集合以进行并行处理。

但我不明白如何在 C# 中执行此操作,我只知道您可以调用AsParallelon IEnumerable,但是您可以控制拆分过程吗?

例如,我的源集合是一个数组,我想将其拆分为 5 个项目子数组,并希望 linq 与这些子数组一起工作。这可能吗?

0 投票
2 回答
89 浏览

java - EnumSet.spliterator 没有特征 Spliterator.NONNULL

我正在考虑这个问题的答案:如何在任何 Java 地图实现上测试空键?

我的第一个想法是检查Spliterator地图的键集是否具有以下特征Spliterator.NONNULL

JavaDoc说:

表示源保证遇到的元素不会为空的特征值。(例如,这适用于大多数并发集合、队列和映射。)

在回答之前我做了一些检查:

没有提供的 Spliteratora不具有此特征,即使自然排序不允许空键。TreeMapCompararator

更令人惊讶的是,键集Spliterator的 s本身并没有这个特性。EnumMapEnumSet

我知道spliterator().hasCharacteristics(Spliterator.NONNULL)在上述情况下的结果返回false为默认实现Set.spliterator()被评估。

但是,这些集合的拆分器不覆盖Set.spliterator()创建Spliteratorwith是否有原因Spliterator.NONNULL?这会破坏我不知道的规范吗?

0 投票
3 回答
865 浏览

java - Spliterator vs Stream.Builder

I read some questions how to create a finite Stream ( Finite generated Stream in Java - how to create one?, How do streams stop?).

The answers suggested to implement a Spliterator. The Spliterator would implement the logic how to and which element to provide as next (tryAdvance). But there are two other non-default methods trySplit and estimateSize() which I would have to implement.

The JavaDoc of Spliterator says:

An object for traversing and partitioning elements of a source. The source of elements covered by a Spliterator could be, for example, an array, a Collection, an IO channel, or a generator function. ... The Spliterator API was designed to support efficient parallel traversal in addition to sequential traversal, by supporting decomposition as well as single-element iteration. ...

On the other hand I could implement the logic how to advance to the next element around a Stream.Builder and bypass a Spliterator. On every advance I would call accept or add and at the end build. So it looks quite simple.

What does the JavaDoc say?

A mutable builder for a Stream. This allows the creation of a Stream by generating elements individually and adding them to the Builder (without the copying overhead that comes from using an ArrayList as a temporary buffer.)

Using StreamSupport.stream I can use a Spliterator to obtain a Stream. And also a Builder will provide a Stream.

When should / could I use a Stream.Builder?
Only if a Spliterator wouldn't be more efficient (for instance because the source cannot be partitioned and its size cannot be estimated)?

0 投票
2 回答
1565 浏览

java - Spliterator Java 8 - 自定义实现

我正在学习这个 Java 8 特性,我真的很难理解Spliterator接口的trySplit()方法实现,以防生成的并行处理的自定义类Stream

任何人都可以通过一个清晰的例子帮助我一些好的教程吗?

0 投票
1 回答
805 浏览

java - 为什么 Spliterators.spliteratorUnknownSize() 不是后期绑定?

我今天阅读了拆分器并使用Spliterators.spliteratorUnknownSize(iterator(), Spliterator.NONNULL). 根据spliteratorUnknownSize()的文档

[resulting] 拆分器不是后期绑定

作为分离器的新手,我想知道为什么会这样。如果我确保iterator()是后期绑定,那么生成的拆分器也应该是,不是吗? spliteratorUnknownSize()只是创建一个IteratorSpliterator尚未绑定到元素源的对象。

即,我很想了解为什么生成的拆分器不是后期绑定的。谢谢你。

0 投票
1 回答
313 浏览

java - Spliterator中estimatedSize和getExactSizeIfKnown之间的区别

我试图了解 Spliterator 的功能并遇到了这两种方法estimatedSizegetExactSizeIfKnown我可以弄清楚是什么estimatedSize但不确定到底是做getExactSizeIfKnown什么的。有人可以举一个例子来解释两者之间的区别。

编辑:我尝试了以下示例,其中两者都相同。在哪些情况下它们会有所不同?

0 投票
1 回答
46 浏览

java - 为什么 HashSet 为 getExactSizeIfKnown 返回 -1

我正在尝试了解 SplitIterator 的功能并遇到以下情况:

为什么该方法getexactsizeifknown返回-1for HashSet

对于其他集合,它返回与estimateSIze()

0 投票
1 回答
201 浏览

java - 拆分器中的 action.accept(val) 做什么

我不明白 action.accept(val) 做了什么,已经搜索过了,我知道必须这样做,只是不知道为什么。
这是一个我不明白的简单示例:

因此,例如,在这段代码中,我知道我们有一个消费者,它消耗来自源(在本例中为拆分器)的每个元素,并且每个元素都必须被操作接受。所以在我看来,动作是 cache.add(val) 和变量索引的增量,我不明白为什么最后一行 (action.accept(val)) 必须写。谢谢你。