在为DirectoryStream读取API时,我遗漏了许多函数。首先,它建议使用for循环从流转到List。我怀念这样一个事实,那就是DirectoryStream不是Stream。
如何从Java8中的Stream中生成DirectoryStream?
发布于 2015-03-02 09:37:31
DirectoryStream不是一个Stream (在Java8引入streams之前,它从Java7开始就已经存在了),但是它实现了Iterable<Path>接口,这样您就可以编写:
try (DirectoryStream<Path> ds = ...) {
Stream<Path> s = StreamSupport.stream(ds.spliterator(), false);
}发布于 2015-03-02 11:10:00
虽然可以使用DirectoryStream方法将Stream转换为Stream,但没有理由这样做。首先创建一个Stream<Path>。
与其打电话给Files.newDirectoryStream(Path),不如打电话给Files.list(Path)。
newDirectoryStream的重载(它接受额外的Filter )可能被Files.list(Path).filter(Predicate)取代,还有一些附加的操作,比如返回Stream<Path>的Files.find和Files.walk,但是,我没有找到要使用“glob pattern”的情况的替代。这似乎是将DirectoryStream转换为Stream可能有用的唯一情况(无论如何,我更喜欢使用正则表达式)…
发布于 2015-03-02 09:37:46
DirectoryStream有一个返回分配器的方法。所以就这么做吧:
Stream<Path> stream = StreamSupport.stream(myDirectoryStream.spliterator(), false);您可能希望看到这个问题,这基本上就是您的问题归结为:How to create a Stream from an Iterable。
https://stackoverflow.com/questions/28806416
复制相似问题