JavaRx:我可以在没有订阅者反应的情况下为可观察设置默认值吗?



我有下载器,它通过套接字将下载的百分比发送到前端。它看起来像这样:

DownloadStream downloadStream = SomeService.downloadStream(someFile);
Long total = downloadStream.totalSize();
Subject totalDownloaded = new BehaviorSubject.createDefault(0);
Disposable downloadSubscriber = totalDownloaded.subscribe(downloaded -> {
    Message message = new Message(downloaded, total);
    send(message);
});

Long downloaded = downloadStream.stream(); //stream() is bulk read/write.
while(downloaded != -1L) {
    chunk = downloadStream.stream();
    totalDownloaded.onNext(totalDownloaded.value + chunk);
}

但问题是 defaultValue=0 调用订阅的 lambda。如何在没有副作用的情况下定义默认值?或者有一些可观察长的增量解决方案?请帮忙...

您可以使用 flatMap(( 和 filter(( 函数删除值。

例:

    // create sequence
    Observable<Integer> o = Observable.just(0, 10, 25, 32, 56, 74, 100);
    System.out.println("all values:");
    o.subscribe(a -> System.out.printf("%d%%; ", a));
    System.out.println("nnfilter by flatMap:");
    o.flatMap(val -> {
                if(val > 5)
                    return Observable.just(val);
                else
                    return Observable.empty();
            })
            .subscribe(a -> System.out.printf("%d%%; ", a));
    System.out.println("nnfilter by filter():");
    o.filter(val -> val > 15)
            .subscribe(a -> System.out.printf("%d%%; ", a));

相关内容

最新更新