You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Files.lines().allMatch()是否按序执行?流处理连续匹配行疑问

问题与实现困惑

我正尝试摒弃while ((line = br.readLine()) != null)这种传统读行写法,但Java流的局限性让我没法在这个场景下写出优雅的解决方案。我的需求是:找到第一个符合特定条件的行,以及该行之前最后两个分别符合另外两个不同条件的行。

下面是我目前能想到的最优实现,但这个写法只有在流按序处理且能提前终止的情况下才有效,可我从官方文档里没法明确这一点:

String[] savedLines = { "", "", "" };
try (Stream<String> lines = Files.lines(file)) {
    lines.allMatch(line -> {
        if (line.startsWith(s1)) {
            savedLines[0] = line;
        } else if (line.startsWith(s2) && line.contains(s3)) {
            savedLines[1] = line;
        } else if (line.startsWith(s4)) {
            savedLines[2] = line;
            return false;
        }
        return true;
    });
}

核心疑虑

我不确定Files.lines()返回的流是否始终为顺序流,也没法确认allMatch方法是否一定会按顺序处理元素,且在lambda返回false时立即终止遍历。

内容的提问来源于stack exchange,提问作者H.v.M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:48:22