【发布时间】:2018-11-06 13:26:59
【问题描述】:
我在 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>,当filter(condition) 过滤掉所有内容时,我不知道如何将其转换为Observable.empty()(condition 对每个thing 进行评估为 false)
【问题讨论】:
-
things.filter(condition)与condition的计算结果始终为false与Observable.empty()有何不同? -
我觉得没什么不同,我相信会是
Observable.empty()。但是当我做things.filter(condition).firstElement()它会返回一个Maybe<Thing>我不知道如何把它变成Observable.empty() -
那你为什么用
firstElement()呢? -
或许你应该使用
.first(condition)然后... -
Observable.empty()是一个恒定的空源,与经过过滤并最终没有项目的任意Observable不同。为什么不继续使用Maybe,这表明您可能有也可能没有物品。充其量您可以通过toObservable()将其转换回Observable。
标签: rx-java rx-java2 reactivex