Java Streams是迭代器设计模式的实现吗?

Java Streams是迭代器设计模式的实现吗?,java,design-patterns,iterator,java-stream,Java,Design Patterns,Iterator,Java Stream,因此,正如标题所问,Java流可以被视为迭代器模式的实现吗 我们可以考虑流()/代码>调用集合来创建某种类型的迭代器,允许您解析该集合的元素,而不实际暴露集合的表示形式?(如果我没有弄错的话,这就是迭代器模式的含义) 编辑:为了避免混淆,请注意我对Java的迭代器接口不感兴趣,我只想知道Java流是否可以被视为迭代器设计模式的实现,以及为什么 我们可以考虑流()/代码>调用集合创建某种迭代器吗?< /p> 是的,我们可以!但有趣的问题是,它是什么样的迭代器 迭代器有许多实现变体和备选方案。(第2

因此,正如标题所问,Java流可以被视为迭代器模式的实现吗

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

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

我们可以考虑<代码>流()/代码>调用集合创建某种迭代器吗?< /p> 是的,我们可以!但有趣的问题是,它是什么样的迭代器

迭代器有许多实现变体和备选方案。(第260页)

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

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


因此,
Stream
仍然是一个迭代器,但它是一个内部迭代器,而不是像
iterator
Enumeration

这样的旧Java API,这是否回答了您的问题@HADIJ这是java的迭代器和流之间的一个有用的比较,它们都有优点和缺点,但是如果我们实际上可以把java的流看作迭代器设计模式的一个有效实现,我会更感兴趣,为什么?设计这些流是为了回答“我们如何为任何聚合对象类型实现通用迭代”的问题吗?否。作为其功能之一,它们是否允许程序员以这种方式使用它们?对这个问题是否有可能产生基于意见的答案,因此应关闭ans?还有,引用自GoF的书。