gpt4 book ai didi

java - 使用 Java 流上的过滤操作结果调用函数的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-30 07:02:34 25 4
gpt4 key购买 nike

我想知道最好的方法是使用新的 Java 8 流 API 读取文件,通过模式匹配过滤输入流,然后将结果传递给使用匹配中的组的函数。我预计这是不可能的,因为流操作是无状态的,模式匹配器中的组无法传递到流处理器中的下一步。

所以,假设我有这个

stream.filter(s -> pattern.matcher(s).matches())

是否可以向接受 s 或最好是来自 matches() 的组的函数添加标注?有点像

stream.filter(s -> pattern.matcher(s).matches()).ifTrue(s -> myfunc(s))

我基本上想避免将所有匹配项收集到内存数据结构中,因为我不知道我的流有多大。假设我有一个大文件,我想构建并序列化一个封装模式匹配器组的对象。我不想将所有匹配项保存在一个数据结构中并强制处理,那么对文件进行操作的最佳方法是什么,这样我就可以处理一行并限制我的内存消耗,同时还允许文件并行处理?

只遍历行并一次处理这些行是否更好?这是否等同于流上 forEach() 的终端操作?在我的用例中,我可能不关心无法在终端操作上并行化的副作用,但我很好奇在并行处理期间 forEach 会出现问题的一般情况。

谢谢。

最佳答案

您可以 peek在流中。

Returns a stream consisting of the elements of this stream, additionally performing the provided action on each element as elements are consumed from the resulting stream.

This is an intermediate operation.

流是完整的,但您可以使用 lambda 表达式(Consumer)执行您的操作。

stream.filter(s -> pattern.matcher(s).matches()).peek(s -> myfunc(s))

关于java - 使用 Java 流上的过滤操作结果调用函数的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29041492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com