如果 observable.filter().first() 什么都不返回,如何返回 Observable.empty()?

god*_*zsa 2 rx-java reactivex rx-java2

我在 RxJava 中有一个函数,它试图根据条件找到一个事物,如果成功,它会转换并将其作为Observable. Observable.empty()如果找不到任何东西,我想返回,因此没有第一个。我不确定这一点,但我认为如果 filter 过滤掉 中的每个元素,Observable结果将是Observable.empty()无论如何(没有firstElement())。

void Observable<Thing> transformFirst(Observable<Thing> things,Predicate<Thing> condition){
  return things
    .filter(condition)
    .firstElement()
    .map(firstThing ->{...do sg...})
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我的问题是firstElement()回报Maybe<Thing>,我不知道如何把它转换成一个Observable.empty()filter(condition)过滤掉一切(conditionevaulates为false,每thing

aru*_*_10 9

您可以添加 switchIfEmpty() 如下所示,

return things
    .filter(condition)
    .switchIfEmpty(Observable.empty())
    .firstElement()
    .map(firstThing ->{...do sg...})
Run Code Online (Sandbox Code Playgroud)