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

Java 流是迭代器设计模式的实现吗?[已关闭]

韩寂离
2023-03-14

想改进这个问题吗?更新问题,以便通过编辑这篇文章用事实和引用来回答。

那么,如题所问,Java流可以被认为是迭代器模式的实现吗?

我们可以认为<代码>。stream()调用创建某种迭代器,允许您解析该集合的元素,而不实际暴露集合的表示?(如果我没弄错的话,这就是迭代器模式的含义)

编辑:为了避免混淆,请注意,我对Java的迭代器接口不感兴趣,我只想知道JavaStreams是否可以被视为迭代器设计模式的实现,为什么?

共有1个答案

薛彭薄
2023-03-14

我们是否可以认为对集合的 .stream() 调用会创建某种迭代器?

是的,我们可以!但有趣的问题是,它是什么样的迭代器?迭代器设计模式最初发表在GoF的书中。在第260页,它指出,

迭代器有许多实现变体和替代方案。

我们可能不会将流识别为迭代器,因为(在Java中)我们太习惯于看到客户端显式调用< code>next()和< code>hasNext()的模式版本。流显然不是迭代器模式的那个版本,那么它们是什么呢?

谁控制迭代?一个基本问题是决定哪一方控制迭代,迭代器或使用迭代器的客户端。当客户端控制迭代时,迭代器称为外部迭代器,当迭代器控制它时,迭代器是内部迭代器。使用外部迭代器的客户端必须推进遍历,并从迭代器中显式请求下一个元素。相反,客户端向内部迭代器递交要执行的操作,迭代器将该操作应用于聚合中的每个元素。

毫无疑问,Java流API的设计考虑到了迭代器模式,特别是模式的内部版本,因为Stuart Marks和Brian Goetz都在这里优雅地发布了他们的设计决策。Stuart提到了初始原型是如何基于<code>Iterable<code>本身的。这对于并行处理来说是不够的,Brian描述了流API的最终实现现在是如何基于<code>拆分器<code>的。

因此Stream仍然是一个迭代器,但它是一个内部迭代器,而不是像Iterator枚举这样的旧JavaAPI。

 类似资料:
  • 迭代器(Iterator) Intent 提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。 Class Diagram Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator; Iterator 主要定义了 hasNext() 和 next() 方法; Client 组合了 Aggregate,为了迭代遍历 Aggregate,也

  • 我正在解决以下问题: 迭代器设计模式具有很强的封装性。例如,一个图书馆想要一个图书管理系统。一个类用于存储它们的详细信息,一个类用于存储图书和书架号。假设图书馆想要使用将数据存储在数据库中。 如何使用JDBC实现迭代器设计模式以确保数据的封装? 我关心的是在哪里处理数据库以及如何在应用程序之间共享数据。 数据库处理程序可以是库类的内部类吗?那么是否可以保存数据并根据请求检索它而不影响封装? 我还在

  • 本文向大家介绍详解Java设计模式——迭代器模式,包括了详解Java设计模式——迭代器模式的使用技巧和注意事项,需要的朋友参考一下 迭代子模式 顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图: 这个思路和我们常用的一

  • 介绍 迭代器模式(Iterator):提供一种方法顺序一个聚合对象中各个元素,而又不暴露该对象内部表示。 迭代器的几个特点是: 访问一个聚合对象的内容而无需暴露它的内部表示。 为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。 遍历的同时更改迭代器所在的集合结构可能会导致问题(比如C#的foreach里不允许修改item)。 正文 一般的迭代,我们至少要有2个方

  • 本文向大家介绍javascript设计模式之迭代器模式,包括了javascript设计模式之迭代器模式的使用技巧和注意事项,需要的朋友参考一下 迭代器模式分为内部迭代器和外部迭代器,内部迭代器就是在函数内部定义好迭代的规则,它完全接手整个迭代的过程,外部只需一次初始调用。 内部迭代器 以下自行实现的类似jquery中$.each()的each()函数就是内部迭代器 内部迭代器在调用时非常方便,但是

  • 本文向大家介绍设计模式构建器模式/Java 实现,包括了设计模式构建器模式/Java 实现的使用技巧和注意事项,需要的朋友参考一下 示例 通过Builder模式,您可以以易于阅读的方式创建具有许多可选变量的类的实例。 考虑以下代码: 如果所有参数都是必需的,那么一切都很好。如果有更多的变量和/或其中一些是可选的怎么办?您不想使用必需参数和可选参数的每种可能的组合来创建大量的构造函数,因为它变得难以