在flatMap之后获取先前发出的项目以清空Observable

时间:2017-03-15 10:32:21

标签: rx-java

我想用Company填充每个Employee,然后将其保存在持久存储中,所以我有这段代码:

public Observable<Company> getCompanies() {
    return repository.getCompanies()
             .flatMap(new Func1<Company, Observable<Employee>>() {
                 @Override
                 public Observable<Employee> call(Company company) {
                     if (company.hasEmployees()) {
                        return repository.getEmployees(company);
                     } else {
                        return Observable.empty();
                     }
                 }
             }, new Func2<Company, Employee, Company>() {
                 @Override
                 public Company call(Company company, Employee employee) {
                     company.addEmployee(employee);
                     return company;
                 }
             }).doOnNext(save());
}

private Action1<Company> save() {
    //more code...
}

如您所见,并非所有公司都有员工,因此在某些情况下会返回Observable.empty()。这导致save()未被调用,并且并非所有Company都被保留。

我该如何解决这个问题?我想存储所有公司,而不仅仅是那些有员工的公司。在向员工填写公司后,必须调用save()方法。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。现在,如果公司没有员工,则会返回Observable.just(Collections.emptyList()),而不是Observable.empty()。任何评论将不胜感激