Java:流中的消费者接口无法按预期工作[重复]

2023-12-01

我有两条语句,我期望它们应该“打印”相同的结果:

Arrays.stream("abc".split("")).forEach(System.out::println);//first
Arrays.stream("abc".split("")).peek(new Consumer<String>() {//second
    @Override
    public void accept(String s) {
        System.out.println(s);//breakpoint
    }
});

事实上,第一条语句将打印

a
b
c

好的,但是第二条语句什么也没打印。我尝试在 IntelliJ 内的“//breakpoint”行中设置断点,但没有命中。

那么,我应该如何更改第二个语句以使用“peek”,因为它在使用“Consumer”处理每个元素时创建一个新流?

多谢。


Stream.peek正如 API 的 javadoc 中所述,主要用于调试目的,不建议在查看操作期间对流执行任何更新操作。

例如,您可以使用以下代码验证中间流状态及其最终结果:

Arrays.stream("acb".split(""))
      .peek(System.out::println) // print a  c  b 
      .sorted()
      .forEach(System.out::println); // print a  b  c

一般来说,这个操作是一个中间操作不会被执行,除非并且终端操作如中提到的那样在流上执行流操作和管道文档的部分,这正是您的原因第一个语句将打印.

Note:虽然正如其他一些答案中所建议的,但其中的行动peek当它能够优化某些短路操作的结果(例如findFirst etc.

如果流实现能够优化掉 生产部分或全部元素(例如短路像这样的操作findFirst,或者在中描述的示例中count()), 不会为这些元素调用该操作。

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

Java:流中的消费者接口无法按预期工作[重复] 的相关文章

随机推荐

  • 缩小映射函数的泛型类型

    我期望 TS 的最新版本 例如 43183 使这种模式成为可能 而无需不安全的铸造 有任何想法吗 操场 export type Mapping number number string string function get
  • SSIS(SQL Server 集成服务)安装失败

    安装 Microsoft DataTools IntegrationServices exe 在已安装 Visual Studio 2019 的 Windows 10 PC 上 我收到这个错误 谁能帮助我理解为什么会发生这种情况 预先非常感
  • HTML5 音频无法在 ie7 或 ie8 中工作

    在 IE7 8 中测试时 我的脚本崩溃并收到此错误 SCRIPT438 对象不支持属性或方法 播放 我正在使用 HTML5 音频标签在我的网页上嵌入和播放音频 div div
  • 在 grails 中使用 junit 4

    我想在我的 grails 测试中使用一些 JUnit 4 功能 但目前 grails 测试在 JUnit 3 下运行 JUnit 4 可以从 groovy 使用 但用 JUnit 4 替换 grails 中的 JUnit jar 似乎并不能
  • MySql 错误:#105(代码 150)。当我创建数据库架构时,我收到错误代码 150。

    DROP SCHEMA IF EXISTS YouthMinistry CREATE SCHEMA IF NOT EXISTS YouthMinistry DEFAULT CHARACTER SET utf16 COLLATE utf16
  • 将存储为 NUMERIC 的日期转换为 DATETIME

    我目前正在处理一个查询 需要计算两个不同日期之间的天数差异 我的问题DATE之前的列 因为它们都存储为numeric列这是一个完全的痛苦 我尝试使用CONVERT正如我过去所做的那样 尝试获取不同的部分DATETIME字符串已构建 但我没有
  • Python 中的 if 和 elif 是良好的编程实践

    你好 我目前正在尝试很好地掌握 Python 中的 if elif else 结构 我正在 python 中尝试一些奇怪的组合 有一个测试程序来了解 if if elif elif else 代码中的输出 但是我得到了像这样的奇怪结果 in
  • Oracle 奇怪行为字符串与星期几的比较

    虽然下面的代码打印 错误的星期四 10 FEB 是星期四 BEGIN IF to char to date 10 FEB 2011 DD MON YYYY Day Thursday THEN dbms output put line Cor
  • 每个 iText 文档多个渲染器:更新了更多详细信息

    我正在使用 iText7 创建一个包含多个部分的文档 有些部分要正常格式化 但有些要格式化为列 我可以使用 ColumnDocumentRenderer 对象将其正确格式化为列 但是当我这样做时 整个文件设置为使用列 有什么方法可以让 iT
  • 如何在Java中实现链表? [复制]

    这个问题在这里已经有答案了 我正在尝试在Java中实现一个简单的哈希表 它使用链接列表来解决冲突 这在C中很容易做到 但我不知道如何在Java中做到这一点 因为你不能使用指针 首先 我知道这些结构已经在Java中实现了 我不打算使用它 只是
  • 如何自定义 Bootstrap 5 文件输入文本和按钮位置?

    Bootstrap 5的输入类型文件太简单 https getbootstrap com docs 5 1 forms form control file input 我有 3 个问题 可以将 选择文件 按钮移到右侧吗 是否可以更改 未选择
  • 通过定义 X 和 Y 构建函数,然后在 R 中积分

    我需要构造一个函数 其中 x 值来自下面这个矩阵的第一列 y 值来自同一矩阵的第二列 目的是稍后计算所需范围内的积分 matrix structure c 0 01 0 02 0 03 0 04 0 05 0 06 0 07 0 08 0
  • PyCharm:使用 Caps Lock-u 和 Caps Lock-on 在代码和运行/终端之间切换

    我想在 PyCharm 中使用 CapsLock u 和 CapsLock n 在代码和运行 终端之间切换 在我的键盘上u位于顶部 并且n位于底部 这给了我一个很好的记忆方法 我不知道如何像这样配置我的 Ubuntu 16 04 unity
  • 在同一 Composer Rest 服务器配置中使用两张名片

    我完成了部署到多组织结构网络的教程 并且成功运行 现在我有两张管理卡 alice trade network bob trade network 以及他们发行的两张身份证 卡 jdoe trade network dlowe trade n
  • 固定标题表,可滚动正文占据可调整大小 DIV 的 100% 高度

    我有一个表 我实际上希望有一个固定的标题 并允许滚动表中的行 同时标题行保持静态 此外 我希望表格的主体部分占据包含元素中渲染标题行后留下的剩余高度 到目前为止 我有两个表 第一个包含一个 thead tr 和多个 th 第二个包含带有多个
  • iOS 中 Java 的 System.nanoTime() 的等价物是什么?

    iOS 中 Java 的 System nanoTime 的等价物是什么 基本上我只是想要一种简单的方法来查看函数执行需要多少毫秒 或毫秒的分数 您可能正在寻找CFAbsoluteTimeGetCurrent CFAbsoluteTime
  • Base64 正确解码为 blob?

    我正在使用 websocket 开发一个项目 并尝试将选定的文件上传到服务器 使用 FileReader readAsDataURL 我可以选择一个文件并检索其 base64 编码 问题始于服务器端 当我使用 PERL MIME Base6
  • 使用 CGRectMake 使视图覆盖全屏

    我正在创建一个视图 使用card io 并且我希望该视图覆盖全屏 它只覆盖了屏幕 atm 的大约 2 3 代码如下 CardIOView cardIOView CardIOView alloc initWithFrame CGRectMak
  • PyGaze 的替代方案 (Tobii 4C)

    我曾经使用眼动仪 Tobii Pro 并写了一个Python脚本 using PyGaze 我最近不得不更换跟踪器并得到了Tobii 4C 这似乎不适用于 PyGaze 库 我在互联网上搜索了几个小时但找不到选择到 PyGaze 你知道我可
  • Java:流中的消费者接口无法按预期工作[重复]

    这个问题在这里已经有答案了 我有两条语句 我期望它们应该 打印 相同的结果 Arrays stream abc split forEach System out println first Arrays stream abc split p