我正试图摆脱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;
});
}
发布于 2022-08-05 14:56:37
考虑到这些行是从文件中读取的,我看不出它们为什么不能按文件顺序排列--除了读取当前行、然后读取下一行等之外,还需要更多的存储空间来执行其他操作。
不管怎么说,不要这样做:你在和what it says in the documentation about the predicate of Stream.allMatch
作对
predicate
-一种非干扰的无状态谓词,可应用于此流的元素。
您的谓词不是无状态的。您不应该在allMatch
中这样做。
坚持BufferedReader
。
https://stackoverflow.com/questions/73251632
复制相似问题