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

2024-01-07

那么,正如标题所问的那样,Java Streams 可以被视为迭代器模式的实现吗?

我们是否可以认为.stream()调用 Collection 会创建某种迭代器,它允许您解析该 Collection 的元素,而无需实际公开 Collection 的表示? (如果我没有记错的话,这就是迭代器模式的含义)

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


我们是否可以认为.stream()调用 Collection 创建某种迭代器?

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

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

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

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

毫无疑问,Java Stream API 的设计考虑了迭代器模式,特别是该模式的内部版本,因​​为 Stuart Marks 和 Brian Goetz 都慷慨地在 SO 上发布了他们的设计决策。斯图尔特提到最初的原型是如何是基于Iterable https://stackoverflow.com/questions/28459498/why-are-java-streams-once-off/28513908#28513908本身。这对于并行处理来说是不够的,Brian 描述了 Stream API 的最终实现是如何的现在基于Spliterator https://stackoverflow.com/questions/36823726/how-to-use-classic-custom-data-structures-as-java-8-streams/36825703#36825703.

So a Stream仍然是一个迭代器,但是是一个内部迭代器,而不是像旧的 Java APIIterator and Enumeration.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Streams 是迭代器设计模式的实现吗? [关闭] 的相关文章

  • Spring Data:限制自定义查询的结果

    在我的 Spring 数据存储库中 我 必须 使用自定义查询 Query注解 我知道我可以限制这样的命名查询中的结果数量 Iterable
  • 从 Bitmap 类创建 .bmp 图像文件

    我创建了一个使用套接字的应用程序 客户端在其中接收图像并将图像数据存储在 Bitmap 类中 谁能告诉我如何创建一个名为我的图像 png or 我的图像 bmp来自此 Bitmap 对象 String base64Code dataInpu
  • 将 JSON Map 传递到 Spring MVC 控制器

    我正在尝试将 Map 的 JSON 表示形式作为 POST 参数发送到我的控制器中 RequestMapping value search do method RequestMethod GET consumes application j
  • JPA:如何将字符串持久保存到数据库字段中,输入 MYSQL Text

    需求是用户可以写文章 所以我选择typeText为了contentmysql数据库内的字段 我怎样才能转换Java String into MySQL Text 干得好Jim Tough Entity public class Articl
  • 在 Java 中填充布尔数组

    作为一名相当新手的 Java 程序员 我给自己设定了一个艰巨的挑战 尝试编写一个简单的文本冒险 不出所料 我已经遇到了困难 我试图为我的 Location 类提供一个属性来存储它包含的退出 我为此使用了一个布尔数组 本质上保存代表每个出口的
  • ASM之前看一下maxStack指令吗?

    我正在尝试使用 ASM 库将字节代码转换为不同的格式 这可以使用 MethodVisitor 来完成 就像这个简单的测试代码一样 return new MethodVisitor ASM7 Override public void visi
  • 确定代码是否在 App Engine 运行时 (Java) 上运行

    如何确定某些代码 Serv let 或简单的类 是否正在 Google App Engine 运行时 Java 上运行 以便决定是否使用 App Engine 的特定库 是否有一些可靠的运行时环境 ID 您可以检查com google ap
  • 在java.util中获取错误ArrayList不带参数[重复]

    这个问题在这里已经有答案了 我已经创建了一个类 Student 现在我尝试将我的 Student 对象存储在 ArrayList 中 但在编译 ArrayList 不接受参数时出现错误 我已经检查了我的代码很多次 但找不到问题所在 我的学生
  • Java 反射:如何检索匿名内部类?

    我在另一个类中有一个匿名内部类 SomeClass Both SomeClass class getClasses and SomeClass class getDeclaredClasses 返回空数组 我在中找不到一些关于此的提示Cla
  • 将多个视频文件合并到一个文件中

    我有多个以相同帧速率和分辨率录制的视频 我想将两个视频合并为一个视频 因此结果文件将是大视频 我正在使用 MP4 解析器 api 并使用下面的代码 Movie countVideo new MovieCreator build Channe
  • 在 JavaFX 中拖动未装饰的舞台

    我希望将舞台设置为 未装饰 使其可拖动且可最小化 问题是我找不到这样做的方法 因为我遇到的示例是通过插入到主方法中的方法来实现的 我想通过控制器类中声明的方法来完成此操作 就像我如何使用下面的 WindowClose 方法来完成此操作 这是
  • 使用 CrudRepository 进行自定义查询

    我想使用 CrudRepository 自定义查询 这是我的代码 Repository public interface CustomerRepository extends CrudRepository
  • Java 套接字:可以从一个线程发送并在另一个线程上接收吗?

    这可能是一个非常基本的问题 但我很难找到答案 让一个线程写入 Socket 的输出流 而另一个线程从 Socket 的输入流读取数据 这样可以吗 编辑 这是一个与外部服务器通信的客户端应用程序 我并不是想让两个线程互相交谈 很抱歉含糊不清
  • 在java中是否可以使用反射创建没有无参数构造函数的“空白”类实例?

    我有一个没有默认构造函数的类 我需要一种方法来获取此类的 空白 实例 空白 意味着实例化后所有类字段都应具有默认值 如 null 0 等 我问这个问题是因为我需要能够序列化 反序列化大对象树 而且我无法访问该对象类的源 并且类既没有默认构造
  • 我们必须将 .class 文件放在 Tomcat 目录中的位置

    我必须把我的 class文件在 Tomcat 目录中 在我的 Java Complete Reference 书中 他们告诉将其放入C Program Files Apache Tomcat 4 0 webapps examples WEB
  • Akka 和 spring 配置

    我正在尝试将 akka 与 spring 结合起来 但没有成功 基本上 我的应用程序似乎不习惯读取 akka 模式 具有架构的 service context xml 的一部分
  • 设置 JAVA_HOME 变量时出现问题

    所以我刚刚下载了 Android Studio 并尝试设置 JAVA HOME 变量以便我可以运行它 我使用的是 Windows 8 并按照我找到的所有说明进行操作 但无济于事 转到高级系统设置 gt 环境变量 然后使用包含我的 jre7
  • 我可以关闭并重新打开套接字吗?

    我学习了一个使用套接字的例子 在此示例中 客户端向服务器发送请求以打开套接字 然后服务器 侦听特定端口 打开套接字 一切都很好 套接字从双方 客户端和服务器 打开 但我仍然不清楚这个东西有多灵活 例如 客户端是否可以关闭一个打开的 从两端
  • Checkstyle - 方法按修饰符排序

    是否可以添加到 checkstyle 规则以按修饰符对类中的方法进行排序 我的意思是开头的公共方法和最后的私有方法 MethodsOrderCheck做这个工作 检查文档 https www qulice com qulice checks
  • JSP 和 scriptlet

    我知道现在使用 scriptlet 被认为是禁忌 没关系 我会同意Top Star的话 因为我目前只是Java新手 到目前为止我听到的是 它是为了让设计师的生活更轻松 但我想知道 这是否与JSP页面的性能有关 另一方面 如果只是为了 让设计

随机推荐

  • C 中的递归。将非递归函数变成递归函数

    gcd 应该是一个递归函数 它应该返回 void 它应该采用两个正整数并将 GCD 放在第三个参数中 这是我编码的 gcd 函数 然而 我意识到这不是一个递归函数 我如何更改此代码 使其成为递归函数 void gcd int x int y
  • 如何使用 Access VBA 在 textBox.Setfocus 之后选择 TextBox 中的所有文本

    当我单击 或双击 Access 表单的文本框中时 我需要选择其中的所有文本 我尝试了以下代码 但没有成功 Me txt CompraPreco SelStart 0 Me txt CompraPreco SelLength Len Me t
  • Java 双重比较 epsilon

    我编写了一个类 用 Java 中的两个双精度数来测试相等 小于和大于 我的一般情况是比较价格 精确度可以达到半美分 59 005 与 59 395 相比 我选择的 epsilon 适合这些情况吗 private final static d
  • 向面板添加垂直滚动条

    我正在尝试做一个Panel可滚动 但只能垂直滚动 所以AutoScroll不起作用 因为子控件必须越过左边缘 那么这是如何做到的呢 尝试 仅 垂直滚动 自动滚动需要为 false 才能接受更改 mypanel AutoScroll fals
  • 在 R 中设置 kmeans 的静态中心

    我想根据预先确定的中心点 my center Points 对长和纬度 my long lats 列表进行分组 当我跑步时 k lt kmeans as matrix my long lats centers as matrix my ce
  • 使用 UIPasteBoard 复制图像 (Swift)

    我最近看到这个项目 用户可以从自定义键盘上点击 GIF 他们会看到一个 复制的 工具栏出现 我有一个问题 如何在产品中重现此工具提示GIF 教程 http o aolcdn com hss storage midas 27c2fb5dfec
  • jQuery 灯箱画廊

    是否存在具有标准灯箱功能的 jQuery 插件 在 灯箱 窗口中 我想在同一 灯箱 窗口中的某处 左侧 底部等 将当前图像和其余图 像显示为缩略图 ColorBox http colorpowered com colorbox 一个轻量级
  • 对 Automapper 配置文件进行单元测试

    我的确想要测试自定义逻辑CreateMap方法 我愿意NOT想要测试某些类型的映射是否存在 我该怎么做或者我需要知道哪些课程 我很感激该文件的每一个提示 Automapper 单元测试似乎很少见 public class UnitProfi
  • 计算 numpy.chararray 中字符出现次数的最快方法

    Python主义者 计算字符在字符中出现的最快方法是什么numpy character array 我正在做以下事情 In 59 for i in range 10 m input Enter A or B rr 0 i m Enter A
  • 使用 ASP MVC 下载并显示私有 Azure Blob

    我将 ASP MVC 5 Razor 与 Microsoft Azure Blob 存储结合使用 我可以使用 MVC 成功地将文档和图像上传到 Blob 存储 但我很难找到一些如何下载和显示文件的 MVC 示例 如果 blob 存储为公共文
  • ConstraintLayout 不会省略 TextView 中的长文本

    我有一个TextView在图像的右侧 我试图在图像旁边放置一些长文本 但该文本应通过在末尾添加 自动结束 然而 这是行不通的 我使用这个布局
  • Google 地图 API - geocode() 不返回纬度和经度

    我试图使用以下代码通过地址获取纬度和经度 function initialize directionsDisplay new google maps DirectionsRenderer geocoder new google maps G
  • 如何避免在factory_girl中循环创建关联模型?

    我有一个应用程序 用户可以使用多种服务登录 例如谷歌 脸书 推特等 为了促进这一点 我有一个基础User模型哪个has many Identity记录 Each Identity记录有一个provider字段 例如 Google Faceb
  • 实现幻灯片的下一个和后退按钮

    我正在尝试制作一个 php 幻灯片 我几乎完成了 我只需要实现下一个和后退按钮 我认为这很容易 但显然你不能在 php 中增加索引 sql SELECT pic url FROM pic info result conn gt query
  • 无法在 Angular 2 应用程序内提交 HTML 表单

    我试图在我的 Angular 2 beta2 应用程序中包含静态 HTML 表单 但当我点击提交按钮时它不会执行任何操作 这是我使用的 HTML
  • Jenkins代理407错误

    我在跑詹金斯 CI在使用代理访问互联网的公司网络内 我尝试在中配置代理详细信息插件 gt 高级 但即使凭据是正确的 是的 我检查了很多次 它也无法验证 测试 URL 即使在http google com http google com并返回
  • 是否可以按 3 个月的时间段对结果进行分组?

    我尝试从当月开始按 3 个月的时间段对结果进行分组 如下所示 row1 15 This should contain November September and October row2 25 This should contain Au
  • 使用 Enterprise Library 5 进行数据库日志记录

    有人知道如何使用 EL 5 0 实现数据库异常日志记录吗 Thanks 您将需要针对数据库运行脚本 以便它为您创建特定的表结构 此外 还将创建一个存储过程 您必须在跟踪侦听器的配置部分中引用该存储过程 您应该能够在此处找到此脚本文件 C E
  • ExpressJS 不会在 app.use 中触发下一个路由

    我在使用 app use 时遇到 ExpressJS 触发错误路由的问题 这是index js 文件中的代码 我在其中组合了所有路由 const app express Router express Router app use api v
  • Java Streams 是迭代器设计模式的实现吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 那么 正如标题所问的那样 Java Streams 可以被视为迭代器模式的实现吗 我们是否可以认为 stream 调用 Collection 会