Java 8 Streams peek/map 不收集不提供输出

2024-03-01

下面的代码不打印任何值。没有打印任何 System.out.println() 语句。我假设 peek 涉及修改数据。令人惊讶的是 peek() 内部的逻辑甚至没有被执行。 如果我使用收集器收集流,我会看到所需的行为。

  • 为什么至少 print 语句 1 没有被执行?
  • 为什么外部对象(输出列表)没有附加所需的值?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class HelloWorld {
    public static void main(String[] args) {
        List<String> input = new ArrayList<>(Arrays.asList("hello", "bye", "vacation"));
        List<String> output = new ArrayList<>();
        input.stream().peek(x -> {
            System.out.println(x+"inside"); // print statement 1
            if (x.length() > 3) {
                output.add(x.toUpperCase());
            }
        });

        output.forEach(System.out::println); // print statement 2
    }
}

代码中存在几个问题:

  1. Stream 没有被关闭终端操作,因此不会调用任何管道操作。
  2. Stream::peek是主要用于调试的中间操作。
  3. 您永远不应该在流中使用任何副作用或有状态操作 - 调用output.add(x.toUpperCase());不好。
  4. The output为空,因此只要 Stream 未关闭,就不会打印任何内容(请参见第 1 条)。

您只需了解 Stream API 即可包装说明 https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html#package.description。最后,你可以得出这样的结论:

List<String> output = input.stream()              // Stream<String>
    .peek(x -> System.out.println(x + " inside")) // print each value
    .filter(x -> x.length() > 3)                  // filter Strings longer than 3 chars
    .map(x -> x.toUpperCase())                    // make them uppercase using map
    .collect(Collectors.toList());                // to List - a terminal operation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 Streams peek/map 不收集不提供输出 的相关文章

  • Hibernate 自定义架构创建

  • 匿名内部类显示不正确的修饰符

    据我了解 以下代码应该打印true作为输出 但是 当我运行这段代码时 它正在打印false 来自 Java 文档15 9 5 匿名类 https docs oracle com javase specs jls se8 html jls 1
  • 如何用Java创建图像

    比如说在我的程序中 我有这个paint 方法 我的愿望是创建所绘制的矩形的图像 使用 for 循环 我尝试了下面的方法 它确实给了我那些矩形 蓝色 但背景是全黑的 当我运行程序而不创建图像 仅在 JFrame 上绘制矩形时 背景为白色 我怎
  • 如何在流中收集到TreeMap中?

    我有两个Collectors groupingBy在流中 我需要收集所有信息TreeMap 我的代码 Map
  • 包含小时、分钟和秒的周期[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个代表年 月 周 日 小时 分钟 秒的间隔数据类型 前三年 年 月 日 可以用Period最后
  • 如何检查字符串是否具有特定模式[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 用户输入任意字符串 程序会区分该字符
  • 黄瓜与 Micronaut

    我正在尝试将 Cucumber 与 Micronaut 一起使用 但当我尝试将其与 Cucumber 一起使用时 MicronautTest 注释根本不起作用 未注入 theApple 请参阅下面的代码 如果我在没有黄瓜的情况下运行它就可以
  • @NotNull.List 的目的

    当我查看标准时限制条件 http docs oracle com javaee 6 api javax validation constraints package summary html在 Bean Validation API JSR
  • PrintStream是有缓冲的,但是flush不会降低性能,而BufferedOutputStream会加速性能

    我预计由于 PrintStream 是缓冲的 通过在每次 print 之后添加刷新操作 速度性能应该会显着降低 但事实并非如此 如下面的代码片段所示 此外 将 PrintStream 包裹在 BufferedOutputStream 周围可
  • Java 中的本机方法

    我花了一些时间学习什么是 Java Native 方法以及它们是在平台相关代码 主要是 C 中实现的 但是我在哪里可以找到这些 Java 的本机实现呢 例如 Thread 类的 sleep long millis 方法是本机的 但它的实现代
  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/LabWebServletHibernate]]

    当使用 eclipse neon 1 在 tomcat 8 上运行应用程序时 我收到此错误 它使用 spring 4 3 3 hibernate 5 2 4 和 maven 嚴重 A child container failed durin
  • 文件保存在文件系统中 VS 保存在数据库中

    我正在设计一个 servlet 或 Struts2 中的操作 用于文件 图像 文档等 下载 但我想知道哪种更好的方法可以将文件保留在文件系统和数据库中 只需保留文件的路径或将文件保留在数据库中 如 BLOB 我知道当我查询数据库时 哪里的
  • 从 org.w3c.dom.Node 获取 Xpath

    我可以从 org w3c dom Node 获取完整的 xpath 吗 假设当前节点指向 xml 文档中间的某个位置 我想提取该元素的 xpath 我正在寻找的输出 xpath 是 parent child1 chiild2 child3
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 使用antlr4获取预处理器行并解析C代码

    我正在使用 Antlr4 来解析 C 代码 并使用以下语法来解析 链接到 C g4 https github com antlr grammars v4 blob master c C g4 上面的语法默认不提供任何解析规则来获取预处理器语
  • 在 Java 中打开现有文件并关闭它。

    是否可以在java中打开一个文件附加数据并关闭多次 例如 psuedocode class variable declaration FileWriter writer1 new FileWriter filename fn1 writer
  • 线程睡眠阻止我的 Swing 应用程序执行

    我的应用程序发生的事情是有道理的 但我不知道如何修复它 以下是我的应用程序功能的简要描述 计时器窗口应显示在屏幕右下角并显示实时时间 一小时后 它应该执行一些操作 我还没有决定该操作 我面临的问题是定时器 java当我刷新实时计时器的秒数时
  • Maven `help: effective-pom` 只为单个项目生成,而不是所有项目

    我想为多模块构建中的所有子项目生成有效的 pom The help effective pom文档here http maven apache org plugins maven help plugin usage html The hel
  • 在 Java 服务器中验证 Windows 用户

    我正在开发一个用 Java 编写的服务器和一个在同一网络上的 Windows 计算机上运行的客户端 用 Net 编写的桌面应用程序 我希望进行一些基本身份验证 以便服务器可以确定运行客户端的用户的用户名 而不需要用户在客户端中重新输入其 W
  • 对 Java 协议缓冲区对象进行一些小更改

    我想在 Java 协议缓冲区对象树的深处进行一个小更改 我可以使用 getBuilder 方法来创建一个新对象 该新对象是旧对象的克隆并进行一些更改 当深入完成此操作时 代码会变得丑陋 Quux Builder quuxBuilder fo

随机推荐

  • Java中修饰符关键字顺序

    每次我用Java编写一个方法时 关键字的数量都多于public void 每次我都会用另一种方式写 有时 static public void 有时 public static void etc 这些关键字的最佳顺序 最佳实践 是什么 ab
  • 创建错误消息 Delphi 7

    好的 我目前是一名 11 年级的学生 正在学习 IT 我正在尝试完成一项实际作业 但遇到了一些问题 我使用的教科书没有告诉我如何在用户未在 RichEdit 中输入数据时创建错误消息 谁能建议我如何做到这一点 感谢您抽出时间提供帮助 这是引
  • UISlider 在停止更改值后评估结果

    我有一个连续的 UI 滑块 我在值发生变化时获取该值 并使用它来计算放入文本字 段的值 我将值更改出口链接到执行计算并且工作正常的方法 但我还想要一种在用户抬起滑块后触发的方法 该方法有效地对最终设置值进行一次评估 我尝试连接 did en
  • 如何修复 DefaultKotlinSourceSetKt 的初始化错误?

    通过项目构建 或简单的 Gradle 同步 我遇到以下错误 导致 java lang NoClassDefFoundError 无法初始化类 org jetbrains kotlin gradle plugin sources Defaul
  • Roslyn .rsp 文件中的引用

    我在 CSharpInteractive rsp 中看到您可以使用 r 添加对 GAC 中 DLL 的引用 如何添加对自己的 DLL 的引用 我尝试了System Reflection Assembly LoadFrom 它没有失败 但不起
  • linq to sql ExecuteQuery() 作为 IQueryable

    ExecuteQuery 方法返回 IEnumerable 但有没有办法让它返回 IQueryable 嗯 你可以打电话AsQueryable 但它不会有任何好处 问题是当你使用ExecuteQuery 查询不是可组合的因为 LINQ to
  • 如何通过 Scala 反射访问默认参数值?

    假设我有一堂课 case class Foo id Int name String note Option String None 自动生成的伴生对象中的构造函数和 apply 方法都采用三个参数 通过反射查看时 第三个参数 注 被标记 p
  • Morgan (node.js):使用自定义格式时着色状态代码(如“dev”中)

    我正在使用 Morgan 登录 Node js 我喜欢预定义格式模式 dev 中提供的状态代码着色 但我使用的是自定义格式 如何获得与 开发 模式相同的颜色 根据摩根文档 开发格式如下 method url status response
  • 在 SQLite 中获取数字的 ceil 值

    所以我明白了这个问题 https stackoverflow com questions 7129249 getting the floor value of a number in sqlite有一个很好的答案 但无论如何我都想向上舍入
  • 活动 android 中的自动增量

    我尝试使用active android 我对如何在表中实现自动增量字段有疑问 在他们的文档中 他们提供了这样的代码 Item item new Item item remoteId 1 item category restaurants i
  • SQL VIEW 应该始终处于 1NF 中吗?

    SQL VIEW 是一个全局逻辑表 可能会也可能不会持久化 但它仍然是一张桌子 因此 VIEW 是否应该始终遵循第一范式 1NF 即没有重复的行 只有标量类型 没有从上到下或从左到右的排序等 那么更高的范式呢 对我来说 我的应用程序 消耗
  • 链式异常有什么优点

    我不明白在代码中使用链式异常有什么好处 考虑到Java 世界中的 ResourceLoader 示例 http www javaworld com javaworld jw 09 2001 jw 0914 exceptions html 如
  • 使用APACHE POI转换PPT转图片时汉字转成方块

    当我尝试使用 Apache POI 项目来转换我的项目时遇到问题PPT到图像 我的代码如下 FileInputStream is new FileInputStream test ppt SlideShow ppt new SlideSho
  • SVN 锁定错误:锁定令牌 URI 的方案错误

    我最近尝试在 SVN 结账中锁定一个文件 但出现以下错误 svn lock m 一条评论 File1 pas svn 警告 W160037 锁定令牌 URI C Program Files x86 VisualSVN Server gt e
  • 如何在 NSWindow 中显示工作表视图

    How do I implement the view in following image The view which appears when button is clicked in System Preferences gt Ne
  • EF6 CodeFirst 我的 [Key] Id 列未像标识列那样自动递增

    我有几个类需要从拥有 Id 的公共基类派生 暂时忽略除其中一个之外的所有内容 假设我们有 public class MyBase Key public int Id get set public class MyName MyBase pu
  • 字符串作为模型

    我认为这应该是一个更容易的任务 Edit 直到今天 Asp Net MVC 似乎还无法针对这种情况提供一个简洁的解决方案 如果您想传递一个简单的字符串作为模型 并且不必定义更多的类和东西来这样做 有任何想法吗 传递简单字符串作为模型 htt
  • 对齐宏内核

    我无法理解这个宏的作用 这些定义在linux kernel但我的怀疑与此无关 我无法理解什么是 x mask mask 线确实如此 define ALIGN x a ALIGN MASK x typeof x a 1 define ALIG
  • 获取 span 元素填充 div 中的空间

    我正在尝试做这样的事情 fixed width Title1 value1 Title2 another value Another title yet another value 这是我的 html 示例代码 div class cont
  • Java 8 Streams peek/map 不收集不提供输出

    下面的代码不打印任何值 没有打印任何 System out println 语句 我假设 peek 涉及修改数据 令人惊讶的是 peek 内部的逻辑甚至没有被执行 如果我使用收集器收集流 我会看到所需的行为 为什么至少 print 语句 1