如何从 DirectoryStream 创建一个 Stream
How to make a Stream from a DirectoryStream
在阅读 DirectoryStream
的 API 时,我错过了很多功能。首先,它建议使用 for 循环从流转到 List
。我想念 DirectoryStream
不是 Stream
的事实。
如何在 Java 8 中制作 Stream<Path>
from a DirectoryStream
?
DirectoryStream
不是 Stream
(它自 Java 7 以来一直存在,在 Java 8 中引入流 api 之前)但是它实现了 Iterable<Path>
接口,所以你可以这样写:
try (DirectoryStream<Path> ds = ...) {
Stream<Path> s = StreamSupport.stream(ds.spliterator(), false);
}
DirectoryStream
有一个 returns 拆分器的方法。所以就这样做:
Stream<Path> stream = StreamSupport.stream(myDirectoryStream.spliterator(), false);
你可能想看看这个问题,这基本上就是你的问题的缩减:How to create a Stream from an Iterable。
虽然可以使用 spliterator
方法将 DirectoryStream
转换为 Stream
,但没有理由这样做。首先创建一个 Stream<Path>
。
例如,而不是调用 Files.newDirectoryStream(Path)
just call Files.list(Path)
。
newDirectoryStream
which accepts an additional Filter
may be replaced by Files.list(Path).filter(Predicate)
and there are additional operations like Files.find
and Files.walk
returning a Stream<Path>
, however, I did not find a replacement for the case you want to use the “glob pattern” 的重载。这似乎是将 DirectoryStream
翻译成 Stream
可能有用的唯一情况(无论如何我更喜欢使用正则表达式)…
在阅读 DirectoryStream
的 API 时,我错过了很多功能。首先,它建议使用 for 循环从流转到 List
。我想念 DirectoryStream
不是 Stream
的事实。
如何在 Java 8 中制作 Stream<Path>
from a DirectoryStream
?
DirectoryStream
不是 Stream
(它自 Java 7 以来一直存在,在 Java 8 中引入流 api 之前)但是它实现了 Iterable<Path>
接口,所以你可以这样写:
try (DirectoryStream<Path> ds = ...) {
Stream<Path> s = StreamSupport.stream(ds.spliterator(), false);
}
DirectoryStream
有一个 returns 拆分器的方法。所以就这样做:
Stream<Path> stream = StreamSupport.stream(myDirectoryStream.spliterator(), false);
你可能想看看这个问题,这基本上就是你的问题的缩减:How to create a Stream from an Iterable。
虽然可以使用 spliterator
方法将 DirectoryStream
转换为 Stream
,但没有理由这样做。首先创建一个 Stream<Path>
。
例如,而不是调用 Files.newDirectoryStream(Path)
just call Files.list(Path)
。
newDirectoryStream
which accepts an additional Filter
may be replaced by Files.list(Path).filter(Predicate)
and there are additional operations like Files.find
and Files.walk
returning a Stream<Path>
, however, I did not find a replacement for the case you want to use the “glob pattern” 的重载。这似乎是将 DirectoryStream
翻译成 Stream
可能有用的唯一情况(无论如何我更喜欢使用正则表达式)…