【问题标题】:RxJava Emit initial value from downstream observable from flatmapRxJava 从 flatmap 的下游 observable 发出初始值
【发布时间】:2018-08-08 15:24:20
【问题描述】:

我有一个用例,我必须将按钮按下转换为数据库获取。我有一个 Observable 从按钮按下。我正在将可观察对象的平面映射到另一个从数据库中获取项目的可观察对象。

Observable<Customer> customerListObservable = getButtonPressObservable()
        .map(event -> new Object())
        .startWith(new Object())
        .flatMap(event -> DatabaseHelper.getDatabase()
                .select("select * from Customer")
                .autoMap(Customer.class)
                .toObservable());

但是,在按下按钮之前,我需要第一次从 db 中获取项目。同样,在随后的按钮按下时,应该再次进行提取。

除了上面的代码还有其他干净的方式来生成初始值吗?

【问题讨论】:

    标签: rx-java rx-javafx


    【解决方案1】:

    我将连接可观察对象:

    Observable<Customer> customerObservable = Observable.concat(getFromDb(), getAfterClick());
    
    private Observable<Customer> getFromDb() {
       return DatabaseHelper.getDatabase()
                    .select("select * from Customer")
                    .autoMap(Customer.class)
                    .toObservable());
    }
    
    private Observable<Customer> getAfterClick() {
       return getButtonPressObservable()
            .map(event -> new Object())
            .startWith(new Object())
            .flatMap(event -> getFromDb());
    }
    

    【讨论】:

    • 感谢大图的建议。使用 concat 比 startWith 有什么优势吗?
    • 不,它实际上是相同的,并且是一个偏好问题。实际上 startWith 只是调用了 concat。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多