仍然收到 "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();
我正在从一个 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();