java - 从 RxJava 1 到 RxJava 2

标签 java rx-java

我正在尝试将此 RxJava1 代码转换为 RxJava2

public static Observable<Path> listFolder(Path dir, String glob) {
    return Observable.<Path>create(subscriber -> {
        try {
            DirectoryStream<Path> stream =
                    Files.newDirectoryStream(dir, glob);

            subscriber.add(Subscriptions.create(() -> {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }));
            Observable.<Path>from(stream).subscribe(subscriber);
        } catch (DirectoryIteratorException ex) {
            subscriber.onError(ex);
        } catch (IOException ioe) {
            subscriber.onError(ioe);
        }
    });
}

问题是,在 Rxjava2 中,我没有让订阅者向它添加新订阅。

最佳答案

享受RxJava 2的简洁(Flowable现在是背压支持类):

public static Flowable<Path> listFolder(Path dir, String glob) {
    return Flowable.using(
        () -> Files.newDirectoryStream(dir, glob),
        stream -> Flowable.fromIterable(stream),
        stream -> stream.close());
}

如果您不想背压,请将 Flowable 替换为 Observable

关于java - 从 RxJava 1 到 RxJava 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353058/

相关文章:

android - 如何解决在 APK META-INF/rxjava.properties 中复制的重复文件

c# - C# 4.0 以后应该有哪些特性来鼓励从 Java 转换?

java - 我应该如何将键值传递给 PL/SQL 过程?

java - 具有动态参数的 Struts 嵌套标签

java - 如何在Retrofit2/rxJava中刷新ACCESS-TOKEN

java - 并行执行的可观察量

rx-java - 如何停止可观察的间隔

java - 如何转换为 Rx java Observable

java - 如何在 Spring Boot + Spring Data 中创建自定义数据源

java - 为什么我会收到此错误 "FirebaseRecyclerAdapter() in FirebaseRecyclerAdapter cannot be applied to:"