如何从DirectoryStream创建流

时间:2015-03-02 09:33:03

标签: java java-8 java-stream

在阅读DirectoryStream的API时,我错过了很多功能。首先,它建议使用for循环从流到List。我怀念DirectoryStream不是Stream的事实。

如何从Java 8中的Stream<Path>创建DirectoryStream

4 个答案:

答案 0 :(得分:31)

虽然可以使用DirectoryStream方法将Stream转换为spliterator,但没有理由这样做。只需首先创建一个Stream<Path>

例如,而不是致电Files.newDirectoryStream(Path)而只是致电Files.list(Path)

接受额外Filter的{​​{3}}的重叠可能会被Files.list(Path).filter(Predicate)取代,而newDirectoryStreamFiles.find等其他操作会返回Stream<Path>但是,我没有找到您要使用Files.walk的案例的替代品。这似乎是将DirectoryStream翻译成Stream可能有用的唯一情况(我更喜欢使用正则表达式)...

答案 1 :(得分:13)

DirectoryStream不是Stream(自Java 7以来一直存在,在Java 8中引入了流API之前),但它实现了Iterable<Path>接口,因此您可以编写:< / p>

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

答案 2 :(得分:2)

DirectoryStream有一个返回spliterator的方法。所以就这样做:

Stream<Path> stream = StreamSupport.stream(myDirectoryStream.spliterator(), false);

您可能希望看到这个问题,这基本上是您的问题减少到的问题:How to create a Stream from an Iterable

答案 3 :(得分:-1)

以下是在Windows平台上成功运行的另一个示例。此示例代码解决了此帖子的主标题中的问题。标题和主体中概述的问题似乎存在分歧。尽管如此,我确实认为这是对这篇文章的相关贡献。

"note":""