如何从目录流制作流

2022-09-01 18:16:52

在阅读API时,我错过了很多功能。首先,它建议使用 for 循环从流转到 。而且我错过了这样一个事实,即它不是.DirectoryStreamListDirectoryStreamStream

如何在Java 8中从目录流制作流<路径>


答案 1

虽然可以将 a 转换为 using 其方法,但没有理由这样做。只需首先创建一个。DirectoryStreamStreamspliteratorStream<Path>

例如,无需调用 Files.newDirectoryStream(Path),只需调用 Files.list(Path)。

接受附加的newDirectoryStream的重载可能会被替换,并且还有其他操作,如Files.findFiles.walk返回一个,但是,我没有找到您想要使用“glob模式”的情况的替代品。这似乎是将a翻译成a可能有用的唯一情况(无论如何,我更喜欢使用正则表达式)......FilterFiles.list(Path).filter(Predicate)Stream<Path>DirectoryStreamStream


答案 2

DirectoryStream不是 a(它自 Java 7 以来就已经存在了,在 Java 8 中引入 streams api 之前),但它实现了接口,因此您可以编写:StreamIterable<Path>

try (DirectoryStream<Path> ds = ...) {
  Stream<Path> s = StreamSupport.stream(ds.spliterator(), false);
}

推荐