【问题标题】:Is Files.lines().allMatch() ordered?Files.lines().allMatch() 是有序的吗?
【发布时间】:2022-08-05 22:56:37
【问题描述】:

我试图摆脱while ((line = br.readLine()) != null),但事实证明,在这种情况下,流的限制很难以优雅的方式克服。我想要匹配某个标准的第一行和匹配某个标准之前的最后一行。这似乎是我能做的最好的,但它只有在以正确的顺序遇到行时才有效,因此它不会提前终止。他们也是吗?从文档中很难分辨。

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;
    });
}

  • 您可以获得List&lt;String&gt; lines = Files.readAllLines(Path),但缺点是此方法不会流式传输,它将所有内容加载到您的 RAM 中,这使得对于非常大的文件无法使用。据我所知,然后对这些行进行排序,第一行是结果列表中的第一个条目。

标签: java stream


【解决方案1】:

不管它们是否按顺序阅读,你都在反对what it says in the documentation about the predicate of Stream.allMatch

predicate - 应用于此流元素的无干扰、无状态谓词

您的谓词不是无状态的。你不应该在allMatch 中这样做。

坚持BufferedReader

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2015-07-08
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多