将Observable <something>映射到Observable <void>

时间:2017-03-16 16:05:48

标签: rx-java

我想执行task 1然后task 2而不需要合并他们发出的项目。我有这个:

interface Service {
    Observable<Something> doTask1();
    Observable<SomethingElse> doTask2();
}

让它们返回Observable<Void>以合并它们是一种好方法吗? 这两个任务都是独立的,所以第一个任务可以返回空Observable,但第二个任务必须执行。

public Observable<Void> doTasks() {
    Observable.merge(service.doTask1(), service.doTask2());
}

如果是这样,有没有&#34;正确&#34;将Observable<Something>映射到Observable<Void>的方法?我是这样做的:

public class TaskService implements Service {
    public Observable<Void> doTask1() {
        return getSomething().map(new Func1<Something, Void>() {
                    @Override
                    public Void call(Something something) {
                        return null;
                    }
                });
    } 
}

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

将值映射到Void是一种有效的方法,但是,RxJava引入了Completable,它是Observable的变体,不会发出项目,只是完成和错误通知。 你可以在这里使用它,因为你不关心发出的值,那么你将获得更清晰的API,也不需要将值映射到更少的值。

public Completable doTasks() {    
    Completable.merge(service.doTask1().toCompletable(), service.doTask2().toCompletable());
}