问题标签 [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.
parallel-processing - Java8中迭代器和拆分器的区别
我在学习时才知道这Parallelism
是Spliterator
.
这可能是一个基本问题,但任何人都可以向我解释和之间的主要区别Iterator
并举Spliterator
一些例子吗?
java-8 - 如何使用拆分器修改集合的元素
经过大量搜索,我发现唯一支持的操作Spliterator
是从 READ 元素中读取元素Collection
。
有人可以告诉我 CRUD 中可以支持的另一个操作Spliterator
。我尝试Collection
使用 a修改元素,Spliterator
但没有成功:
c# - C# 中的 Spliterator 等价物是什么?
在 Java 中,我可以编写一个Spliterator
接口实现,在其中我可以指定源集合将如何精确地拆分为子集合以进行并行处理。
但我不明白如何在 C# 中执行此操作,我只知道您可以调用AsParallel
on IEnumerable
,但是您可以控制拆分过程吗?
例如,我的源集合是一个数组,我想将其拆分为 5 个项目子数组,并希望 linq 与这些子数组一起工作。这可能吗?
java - EnumSet.spliterator 没有特征 Spliterator.NONNULL
我正在考虑这个问题的答案:如何在任何 Java 地图实现上测试空键?
我的第一个想法是检查Spliterator
地图的键集是否具有以下特征Spliterator.NONNULL
:
JavaDoc说:
表示源保证遇到的元素不会为空的特征值。(例如,这适用于大多数并发集合、队列和映射。)
在回答之前我做了一些检查:
没有提供的 Spliterator
a不具有此特征,即使自然排序不允许空键。TreeMap
Compararator
更令人惊讶的是,键集Spliterator
的 s本身并没有这个特性。EnumMap
EnumSet
我知道spliterator().hasCharacteristics(Spliterator.NONNULL)
在上述情况下的结果返回false
为默认实现Set.spliterator()
被评估。
但是,这些集合的拆分器不覆盖Set.spliterator()
创建Spliterator
with是否有原因Spliterator.NONNULL
?这会破坏我不知道的规范吗?
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, aCollection
, an IO channel, or a generator function. ... TheSpliterator
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 aStream
by generating elements individually and adding them to theBuilder
(without the copying overhead that comes from using anArrayList
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)?
java - Spliterator Java 8 - 自定义实现
我正在学习这个 Java 8 特性,我真的很难理解Spliterator
接口的trySplit()
方法实现,以防生成的并行处理的自定义类Stream
。
任何人都可以通过一个清晰的例子帮助我一些好的教程吗?
java - 为什么 Spliterators.spliteratorUnknownSize() 不是后期绑定?
我今天阅读了拆分器并使用Spliterators.spliteratorUnknownSize(iterator(), Spliterator.NONNULL)
. 根据spliteratorUnknownSize()
的文档
[resulting] 拆分器不是后期绑定
作为分离器的新手,我想知道为什么会这样。如果我确保iterator()
是后期绑定,那么生成的拆分器也应该是,不是吗? spliteratorUnknownSize()
只是创建一个IteratorSpliterator
尚未绑定到元素源的对象。
即,我很想了解为什么生成的拆分器不是后期绑定的。谢谢你。
java - Spliterator中estimatedSize和getExactSizeIfKnown之间的区别
我试图了解 Spliterator 的功能并遇到了这两种方法estimatedSize
,getExactSizeIfKnown
我可以弄清楚是什么estimatedSize
但不确定到底是做getExactSizeIfKnown
什么的。有人可以举一个例子来解释两者之间的区别。
编辑:我尝试了以下示例,其中两者都相同。在哪些情况下它们会有所不同?
java - 为什么 HashSet 为 getExactSizeIfKnown 返回 -1
我正在尝试了解 SplitIterator 的功能并遇到以下情况:
为什么该方法getexactsizeifknown
返回-1
for HashSet
?
对于其他集合,它返回与estimateSIze()
java - 拆分器中的 action.accept(val) 做什么
我不明白 action.accept(val) 做了什么,已经搜索过了,我知道必须这样做,只是不知道为什么。
这是一个我不明白的简单示例:
因此,例如,在这段代码中,我知道我们有一个消费者,它消耗来自源(在本例中为拆分器)的每个元素,并且每个元素都必须被操作接受。所以在我看来,动作是 cache.add(val) 和变量索引的增量,我不明白为什么最后一行 (action.accept(val)) 必须写。谢谢你。