仍然收到 "stream has already been operated upon or closed" 错误

Still getting "stream has already been operated upon or closed" error

我正在从一个 txt 文件中读取行,试图同时获取两行(当前行和下一行)。我使用供应商,但仍然出现错误。

Stream<String> lines = Files.lines(Paths.get(fileName));
Supplier<Stream<String>> streamSupplier = () -> lines;
Optional<String> line = streamSupplier.get().skip(offset).findFirst();
Optional<String> nextLine = streamSupplier.get().skip(offset+1).findFirst();

我在这里错过了什么?

问题是您的供应商没有为您提供流的两个实例:它每次都为您提供相同的实例。 streamSupplier.get()和直接用lines没什么区别

如果你想从流中读取两个东西,跳过 offset,然后限制 2,然后收集到一个列表:

List<String> items = lines.skip(offset).limit(2).collect(Collectors.toList());

现在您可以从列表中获取这些项目:

Optional<String> line = items.size() > 0 ? Optional.of(items.get(0)) : Optional.empty();
Optional<String> nextLine = items.size() > 1 ? Optional.of(items.get(1)) : Optional.empty();