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.
相关产品推荐
相关产品推荐

