如何转换
从rxjava从Stream<Path> s = Files.walk(root)
到Flowable
?
请注意,我们不能简单地使用Flowable.fromIterable(()->s.iterator())
,因为Files.walk
会抛出IOException
。最简单的方法是从Files.walk
收集结果,然后从可迭代的集合中创建Flowable,但这似乎不是惯用的方法。
答案 0 :(得分:0)
我认为我找到了一种不错的方法。 Flowable.using()
允许使用一些“底层”资源创建Flowable。如果Files.walk()
以IOException
失败,则调用子订户的onError
,并在完成“资源”后关闭(在这种情况下,java.util.stream.Stream
具有路径)。
import io.reactivex.Flowable;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
final Flowable<Path> pathFlowable = Flowable.using(
() -> Files.walk(Path.of("/nofile")),
stream -> Flowable.fromIterable(stream::iterator),
Stream::close
);
pathFlowable.subscribe(System.out::println, t -> System.out.println("Error " + t.toString()));