Java 8流条件处理

gdiazc:

我有兴趣将流分成两个或多个子流,并以不同的方式处理元素。例如,(大)文本文件可能包含A类型的行和B类型的行,在这种情况下,我想执行以下操作:

File.lines(path)
.filter(line -> isTypeA(line))
.forEachTrue(line -> processTypeA(line))
.forEachFalse(line -> processTypeB(line))

上一个是我试图抽象这种情况。实际上,我有一个非常大的文本文件,其中的每一行都针对正则表达式进行测试;如果该行通过,则将对其进行处理,而如果被拒绝,则我想更新一个计数器。我对拒绝的字符串进行的进一步处理就是为什么我不简单地使用filter

是否有任何合理的方法可以对流执行此操作,还是必须回退到循环?(我也希望它可以并行运行,所以流是我的首选)。

科苏

Java 8流并非旨在支持这种操作。jdk

流仅应操作一次(调用中间流或终端流操作)。例如,这排除了“分叉”流,其中,同一源提供了两个或多个管道,或同一流的多个遍历。

如果您可以将其存储在内存中,则Collectors.partitioningBy只有两种类型并使用可以使用Map<Boolean, List>否则使用Collectors.groupingBy

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章