比 Stream.peek() 更好的方法

2024-01-10

“peek”主要用于调试。如果我想在流中间调用流上的方法来更改流对象的状态,该怎么办?

Stream.of("Karl", "Jill", "Jack").map(Test::new).peek(t->t.setLastName("Doe"));

我可以做:

Stream.of("Karl", "Jill", "Jack").map(Test::new).map(t->{t.setLastName("Doe"); return t;});

但这看起来很丑。这是不应该做的事情还是有更好的方法来做到这一点?

EDIT: forEach可以工作,只是它是一个终端操作,因此您之后无法继续处理流。然后我希望创建一个集合,执行 forEach,然后再次开始流式传输集合。

EDIT: map(Class::processingMethod)这就是我现在正在做的事情,但是自从processingMethod只是返回this,这似乎是地图的误用。另外,它读起来并不像业务逻辑。

最终编辑:我接受了@Holger的回答。Stream.peek不能期望处理 Stream 上的所有元素,因为它不是终端操作。同样适用于map。即使您可能已经使用保证流能够处理所有操作的内容终止了流,但您不应该编写期望每个用户都这样做的代码。因此,要进行处理,您应该使用forEach on a Collection,然后开始流式传输Collection如果你愿意的话,再来一次。


您过度使用方法引用。简单性Test::new如果它使您的流使用的其余部分变得复杂,那么它就没有任何价值。

一个明确的解决方案是:

Stream.of("Karl", "Jill", "Jack")
      .map(first -> { Test t = new Test(first); t.setLastName("Doe"); return t; })
      …

或者更好

Stream.of("Karl", "Jill", "Jack").map(first -> new Test(first, "Doe")) …

假设该类具有接受两个名称的不太牵强的构造函数。

上面的代码解决了用例,其中操作操作本地构造的对象,因此仅当该对象将被后续 Stream 操作消耗时该操作才相关。对于其他情况,该操作对 Stream 外部的对象有副作用,滥用map几乎具有所有的缺点peek解释于“在Java流中,peek真的只能用于调试吗? https://stackoverflow.com/a/33636377/2711488

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

比 Stream.peek() 更好的方法 的相关文章

  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的

随机推荐

  • Plotly python离线-点击时访问url?

    是否可以配置一个plotly https plot ly python绘图以便用户在单击某个数据点时被带到特定的 url 我的预期用途是条形图 我希望能够单击一个条形图 然后转到一个 url 每个条形图都配置有不同的 url 我正在使用pl
  • 如何在 highcharter 中悬停时获得系列突出显示?

    Highcharts 具有这个巧妙的功能 当将鼠标悬停在柱形图中的条形上时 整个系列都会突出显示 最好实时查看here https www highcharts com demo column negative 在 R 包装器中highch
  • 使用 dev_appserver.py 进行覆盖不包括我的项目文件

    我运行以下命令覆盖范围3 6 https pypi python org pypi coverage Appengine 1 8 0 64 位 Ubuntu 13 04 上的 Python 2 7 4 coverage run dev ap
  • 如何在 C# 中检测任何 Excel 单元格的更改?

    我正在编写一个 Excel VSTO 插件 并且希望获取特定工作表中的单元格更改事件 如何才能做到这一点 检查Excel Application SheetChange事件处理程序 基本上 只要任何工作表中的任何单元格发生更改 它就会触发
  • 使用 Carrierwave 重命名上传的文件

    我正在使用 Carrierwave 上传文件 并且可以正常工作 我的问题是尝试更改上传文件的名称 在生成的 uploader rb 中有一个我认为我应该使用的方法 def filename something jpg if original
  • vim 键映射参考

    我刚刚安装了 command t 插件以及将其映射到 cmd t 而不是 Leader t 的内容 我对 vim 相当陌生 我不知道按键映射的符号是什么 在哪里可以找到在 vim 中映射组合键时使用的符号的参考 vim 的一个原则是 未记录
  • 如何在 javascript 中从弹出窗口进行打印?

    我有一个 Net 应用程序 它动态创建一个小型 HTML 页面 并使用 javascript document open 方法将其弹出在新窗口中 具有该功能的一切都工作正常 现在我想向打印该页面的 HTML 页面添加一个按钮 我尝试使用以下
  • Boolean.TRUE == myBoolean 与 Boolean.TRUE.equals(myBoolean)

    是否有过使用的情况equals Boolean and 处理时会返回不同的结果Boolean物体 Boolean TRUE myBoolean Boolean TRUE equals myBoolean 我在这里考虑的不是原始类型 而是布尔
  • 如何将 JFrame 放入 Java Swing 中现有的 JPanel 中?

    I have an open source java swing application like this http i47 tinypic com dff4f7 jpg http i47 tinypic com dff4f7 jpg 您
  • Wix - 安装然后运行 ​​powershell 脚本

    我知道有几篇关于 Wix 和 PowerShell 脚本的帖子 但在尝试了这些帖子中的解决方案后 我仍然没有得到我想要的结果 为了解释我的情况 我创建了一个 Wix 安装项目 它将从我的本地计算机 运行 Windows 7 获取 2 个 P
  • 针对特定文件扩展名的 Android 意图过滤器?

    我希望能够从网络下载具有特定扩展名的文件 并将其传递给我的应用程序来处理它 但我无法弄清楚意图过滤器 文件类型不包含在 mimetypes 中 我尝试使用
  • 在 Agda 中对 ST monad 进行建模

    最近这个所以问题 https stackoverflow com questions 33975270 can a st like monad be executed purely without the st library促使我在 Ha
  • 使用 Wordpress Super Cache 从缓存中排除动态值

    我正在使用超级缓存插件 一段时间以来 我一直在寻找解决方案 但没有成功 我需要禁用文件中一个函数的缓存functions php add shortcode custom counter example shortcode function
  • Webpack - Yaml -> JSON -> 提取文件

    我有一个包含一些翻译的 YAML 文件 我需要将这些文件转换为 JSON 文件 我尝试过使用yaml import loader and json loader但我收到错误 这是我的设置 const ExtractTextPlugin re
  • Java中的多线程解压

    因此 我尝试在 Java 中对 zip 文件进行只读访问 以多线程方式解压缩 因为我的 ZipFile ZipEntry 标准简单单线程解决方案使用枚举和输入流以及其他结果导致它采取大约需要整整五秒才能将一个 50 兆的 zip 文件解压到
  • Flutter:我应该在哪里调用 SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark)

    在我的 flutter 应用程序中 屏幕 A 没有 AppBar 所以我打电话SystemChrome setSystemUIOverlayStyle SystemUiOverlayStyle dark 在构建中 在另一个具有 AppBar
  • 加载后删除程序集

    我正在尝试使用以下代码加载 MSIL 程序集 string PathOfDll PathOfMsILFile Dll Assembly SampleAssembly SampleAssembly Assembly LoadFrom Path
  • React - 将对象转换为具有属性的对象数组

    我有以下对象 data name 1 a name 2 b name 3 b 如何转换为保留名称和数据 a b 的对象数组 以便我可以为传入名称和数据的每个对象映射和渲染组件 如果您使用reduce函数 您可以执行以下操作来实现您的目标 O
  • 确定实施 sql server 触发器的一些缺点吗?

    我计划在所有 DML 语句上实现触发器以进行日志管理 因此 请确定这样做是否存在一些问题或缺点 我认为这个 SQL Server MVP 博客post http blog sqlauthority com 2007 05 24 sql se
  • 比 Stream.peek() 更好的方法

    peek 主要用于调试 如果我想在流中间调用流上的方法来更改流对象的状态 该怎么办 Stream of Karl Jill Jack map Test new peek t gt t setLastName Doe 我可以做 Stream