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

时间:2018-11-06 13:26:59

标签: rx-java rx-java2 reactivex

我在RxJava中有一个函数,该函数尝试根据条件查找事物,如果成功,它会转换并以Observable的形式返回。我想返回Observable.empty(),因为它找不到任何内容,因此没有第一个。 我对此不太确定,但是我认为,如果过滤器过滤掉Observable中的每个元素,则无论如何(没有Observable.empty()),结果将是firstElement()

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

编辑:

我的问题是firstElement()返回一个Maybe<Thing>,当Observable.empty()过滤掉所有内容时,我不知道如何将其转换为filter(condition)({{1} }对于每个condition都为false

1 个答案:

答案 0 :(得分:2)

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

return things
    .filter(condition)
    .switchIfEmpty(Observable.empty())
    .firstElement()
    .map(firstThing ->{...do sg...})