如何在Java中将扫描仪字符串转换为Stream?

Ste*_*sky 6 java java-8 java-stream

Java8,我该怎么形成StreamString从扫描仪读取结果?

InputStream is = A.class.getResourceAsStream("data.txt");
Scanner scanner = new Scanner(new BufferedInputStream(is), "UTF-8");
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}
Run Code Online (Sandbox Code Playgroud)

这就是将扫描仪变成我想要迭代使用的流forEach.

Bor*_*der 12

你这一切都错了,Scanner不需要:

try (final InputStream is = A.class.getResourceAsStream("data.txt");
        final Reader r = new InputStreamReader(is, StandardCharsets.UTF_8);
        final BufferedReader br = new BufferedReader(r);
        final Stream<String> lines = br.lines()) {

}
Run Code Online (Sandbox Code Playgroud)

如果你真的想使用Scannerimplements Iterator那么你可以这样做:

public Stream<String> streamScanner(final Scanner scanner) {
    final Spliterator<String> splt = Spliterators.spliterator(scanner, Long.MAX_VALUE, Spliterator.ORDERED | Spliterator.NONNULL);
    return StreamSupport.stream(splt, false)
            .onClose(scanner::close);
}
Run Code Online (Sandbox Code Playgroud)

PS你也似乎没有关闭资源.永远关闭InputStream.