gpt4 book ai didi

java - 使用其他 Observable 过滤 RxJava Observable

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:41:29 25 4
gpt4 key购买 nike

我正在使用 RxAndroid 2.0.1 和 RxJava 2.0.6。

我有两个可观察对象:一个返回 Maybe<MyObject>基于一些字符串(ID)。当返回可选对象时,我必须调用第二个接受 MyObject 实例并返回 Single<Boolean> 的对象。如果对象满足某些条件。然后我可以对对象实例做一些进一步的操作。

我目前的实现如下:

objectDAO.getById(objectId)
.subscribe(
myObject -> checkCondition(myObject),
throwable -> /* Fallback */,
() -> /* Fallback */
);

private void checkCondition(final MyObject myObject) {
otherDAO.checkCondition(myObject)
.subscribe(
isTrue -> {
if (isTrue) {
// yay! now I can do what I need with myObject instance
} else {
/* Fallback */
}
},
throwable -> /* Fallback */
);
}

现在我想知道如何简化我的代码。我的想法:

  1. 尝试使用zip - 我不能,因为在第一个 Observable 返回 MyObject 之前无法订阅第二个 Observable

  2. 尝试使用filter - 现在的问题是我需要使用阻塞 get 来调用第二个可观察对象。它可能会工作,但看起来像代码味道:

    objectDAO.getById(objectId)
    .filter(myObject ->
    otherDAO.checkCondition(myObject).blockingGet()
    )
    .subscribe(
    myObject -> checkCondition(myObject),
    throwable -> /* Fallback */,
    () -> /* Fallback */
    );
  3. 尝试使用flatMap - 第二个可观察对象返回 boolean 值,而我需要返回原始对象。因此,我需要使用 blockingGet 映射代码 fragment 并返回原始对象或 Maybe.empty()

有什么建议可以让代码“干净”(它更小而且仍然清楚内部发生了什么)吗?

最佳答案

你可以做的一件事:

objectDAO.getById(objectId)
.flatMapSingle(myObject -> otherDAO
.checkCondition(myObject)
.map(isTrue -> Pair.create(myObject, isTrue))
)

然后你有一个Observable<Pair<MyObject, Boolean>>并可以随心所欲地继续:subscribe直接检查Boolean那里,filter通过 boolean 值等。

关于java - 使用其他 Observable 过滤 RxJava Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42951869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com