当前位置: 首页 > 知识库问答 >
问题:

在java流中,使用.peek()被视为仅用于调试目的,日志记录会被视为调试吗?[副本]

劳和歌
2023-03-14

因此,我有一个对象列表,我想要部分或全部被处理,我想要记录那些被处理的对象。

List<ClassInSchool> classes;
classes
.stream()
.filter(verifyClassInSixthGrade())
.filter(classHasNoClassRoom())
.peek(classInSchool -> log.debug("Processing classroom {} in sixth grade without classroom.", classInSchool)
.forEach(findMatchingClassRoomIfAvailable());

为了进一步解释,这个问题的关键在于:“不要以无意的方式使用API,即使它完成了您的当前目标。”我的问题是,每次使用peek(从调试流到验证整个链按设计工作并再次删除.peek()为止)是否都是无意中的使用。因此,如果使用它作为记录流实际处理的每个对象的手段,则被认为是无意的使用。

共有1个答案

史俊德
2023-03-14

code>peek的文档将其意图描述为

此方法的存在主要是为了支持调试,在调试中,您希望在元素流过管道中的某个点时看到这些元素

窗体.peek(classInSchool->Log.Debug(“processing Clasment{}in sixth grade with Clasment.”,classInSchool)的表达式满足了这一意图,因为它是关于报告元素的处理情况的。您是使用日志框架,还是只打印语句(如文档示例中的.peek(E->System.Out.Println(“Filtered Value:”+e))都无关紧要。在这两种情况下,重要的是意图,而不是技术方法。如果有人使用peek意图打印所有元素,那么它将是错误的,即使它使用了与文档示例(System.Out.Println)相同的技术方法。

文档并不要求您必须区分生产环境或调试环境,以删除对前者的peek用法。实际上,您的使用甚至可以实现这一点,因为日志框架允许您通过可配置的日志级别静音该操作。

我仍然建议记住,对于某些管道,插入peek操作可能会插入比实际操作更多的开销(或者在这样的程度上阻碍JVM的循环优化)。但是如果您没有遇到性能问题,您可以遵循老的建议,不要尝试优化,除非您有真正的原因…

 类似资料:
  • 问题内容: 我正在阅读有关Java流的信息,并在不断学习中发现新事物。我发现的新peek()功能之一就是功能。我偷看的几乎所有内容都说应将其用于调试Streams。 如果我有一个Stream,其中每个帐户都有一个用户名,密码字段以及一个login()和loggingIn()方法,该怎么办。 我也有 和 为什么会这么糟糕? 现在,据我所知,这确实可以实现预期的目的。它; 取得帐户清单 尝试登录每个帐

  • 我正在阅读有关Java流的内容,并在此过程中发现了一些新的东西。我发现的一个新东西是函数。我在peek上看到的几乎所有东西都说它应该用来调试流。 如果我有一个流,其中每个帐户都有用户名、密码字段和login()和loggedIn()方法。 我也有 而且 为什么会这么糟? null 做这样的事情有什么坏处?有什么理由不让我继续吗?最后,如果不是这个解决方案,那又是什么呢? 它的原始版本使用了.fil

  • 在ASP中引入了调用视图组件作为标记助手。NET内核1.1。(请参阅“将视图组件作为标记辅助对象调用”)。但是下面只返回视图中VC部分的测试。似乎

  • 一般来说,你应该在运行时增加调试选项来调试问题;也可以把调试选项添加到 Ceph 配置文件里来调试启动问题,然后查看 /var/log/ceph (默认位置)下的日志文件。 Tip 调试输出会拖慢系统,这种延时有可能掩盖竞争条件。 日志记录是资源密集任务。如果你碰到的问题在集群的某个特定区域,只启用那个区域对应的日志功能即可。例如,你的 OSD 运行良好、元数据服务器却不行,这时应该先打开那个可疑

  • Web-INF中的jboss-deployment-structure.xml: 和log4j.xml设置(在war中位于“web-inf/classes/log4j.xml”中):

  • 问题内容: 我正在使用最新的jetty插件通过简单的Java运行webapp ,但似乎无法找到一种方法来告诉jetty将DEBUG消息输出到控制台(对于嵌入式jetty实例,而不是插件本身)。当前仅输出WARN和INFO消息。我尝试设置和,但是他们什么也没做。我已经看过文档了,但是似乎没有涵盖。 问题答案: 更新: 好的,我终于把事情做好了,这就是我所做的。 我的理解是,由于Jetty 7使用JS