gpt4 book ai didi

Java 8 流条件处理

转载 作者:IT老高 更新时间:2023-10-28 20:50:49 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

A stream should be operated on (invoking an intermediate or terminal stream operation) only once. This rules out, for example, "forked" streams, where the same source feeds two or more pipelines, or multiple traversals of the same stream.

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

关于Java 8 流条件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854574/

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