当前位置: 首页 > 知识库问答 >
问题:

Java8中迭代器和拆分器的区别

杜茂
2023-03-14

这可能是一个基本问题,但是有人能解释一下iteratorspliterator之间的主要区别并给出一些例子吗?

共有1个答案

东方河
2023-03-14

对我来说,这些名字几乎是不言自明的。spliterator==Splittable Iterator:它可以拆分一些源,也可以迭代它。它具有与迭代基本相同的功能,但是它有一个额外的特性,即它可能被拆分为多个部分:这就是trysplit的作用。并行处理需要拆分。

迭代器总是有一个未知的大小:只能通过hasnext/next遍历元素;拆分器可以提供大小(从而在内部改进了其他操作);可以通过getexactsizeifknowled获得精确值,也可以通过estimatesize获得近似值。

另一方面,TryAdvancehasnext/next来自迭代器,但它是一个单一的方法,很容易推理。与此相关的是ForeachRealment,它在默认实现中委托给TryAdvance,但不必总是这样(例如,请参见ArrayList)。

通过其内部属性,如distinctsorted等,拆分器也是一个“更聪明”的迭代器(在实现自己的拆分器时需要正确提供这些属性)。这些标志在内部用于禁用不必要的操作;例如,请参见此优化:

 someStream().map(x -> y).count();

因为在流的情况下大小不会改变,所以映射可以完全跳过,因为我们所做的只是计数。

如果需要,可以通过以下方式围绕迭代器创建拆分器:

Spliterators.spliteratorUnknownSize(yourIterator, properties)
 类似资料:
  • 与之间的差异: > 它们可能有不同的特点: 这里讨论的似乎是另一个毫无意义的流拆分器特性策略(并行计算似乎更好):深入理解Java8和Java9中的拆分器特性 在本例中,从禁用拆分功能的顺序流创建了一个拆分器(返回null)。当以后需要转换回一个流时,该流不会从并行处理中受益。一种耻辱。 最大的问题是:作为解决办法,在调用之前总是将流转换为并行流会有什么主要影响?

  • 问题内容: 我们可以使用遍历a 或a 或a 。但是只能用于遍历a ,不能遍历a 。为什么? 我知道主要的区别在于,使用迭代器,我们只能在一个方向上运行,而我们可以在两个方向上运行。还有其他区别吗?和任何优势了? 问题答案: 差异在Listdocerator的Javadoc中列出 您可以 向后迭代 随时获取迭代器。 随时添加新值。 在这一点上设置一个新值。

  • 本文向大家介绍python生成器,可迭代对象,迭代器区别和联系,包括了python生成器,可迭代对象,迭代器区别和联系的使用技巧和注意事项,需要的朋友参考一下 生成器,可迭代对象,迭代器之间究竟是什么关系? 用一幅图来概括: 1.生成器 定义生成器 方式一: 方式二: 定义成功后,我们可以利用next()访问生成器下一个元素 但一般用for循环遍历 2.迭代器 任何实现了__iter__和__ne

  • 问题内容: 迭代器和生成器有什么区别?有关何时使用每种情况的一些示例会有所帮助。 问题答案: 是一个更笼统的概念:其类具有next方法(在Python 3中)和具有方法的任何对象。 每个生成器都是一个迭代器,但反之亦然。生成器是通过调用具有一个或多个yield表达式(yield在Python 2.5及更早版本中为语句)的函数而构建的,并且该函数是满足上一段对的定义的对象。 当你需要一个具有某些复杂

  • 关于SI中的元素,我有几个基本问题。 我知道要形成定制的拆分器逻辑,我们需要扩展并覆盖方法。 然后,这些拆分消息的集合将显示在拆分器的输出通道上(假设在传入消息上没有配置回复通道)。

  • 本文向大家介绍详解Python3中的迭代器和生成器及其区别,包括了详解Python3中的迭代器和生成器及其区别的使用技巧和注意事项,需要的朋友参考一下 介绍 本篇将介绍Python3中的迭代器与生成器,描述可迭代与迭代器关系,并实现自定义类的迭代器模式。 迭代的概念 上一次输出的结果为下一次输入的初始值,重复的过程称为迭代,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始值 注:循环不是迭