作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实现了一个名为“FilterByLatestFrom”的伪运算符,作为kotlin的扩展功能。
我使用此运算符编写了下一个代码:
fun testFilterByLatestFromOperator(){
val observableA : Observable<Int> = Observable.fromArray(1,2,3,4,5,6,7,8,9,10)
val observableC : PublishSubject<Int> = PublishSubject.create()
val observableB : Observable<Int> = Observable.just(2).mergeWith(observableC)
observableB.subscribe { println("observableB onNext: $it") }
observableA
.subscribe({ println("Original : $it")})
observableA.filterByLatestFrom(observableB, BiFunction { aVal, bVal -> aVal%bVal==0 })
.subscribe({ println("Result A : $it") })
observableC.onNext(3)
observableA.filterByLatestFrom(observableB, BiFunction { aVal, bVal -> aVal%bVal==0 })
.subscribe({ println("Result AC : $it") })
}
observableB onNext: 2
Original : 1
Original : 2
Original : 3
Original : 4
Original : 5
Original : 6
Original : 7
Original : 8
Original : 9
Original : 10
Result A : 2
Result A : 4
Result A : 6
Result A : 8
Result A : 10
observableB onNext: 3
Result AC : 2
Result AC : 4
Result AC : 6
Result AC : 8
Result AC : 10
class FilterByLatestFrom<T,U>(private val observable: Observable<T>, private val biFunction: BiFunction<U, T, Boolean>){
fun filter() : ObservableTransformer<U,U> = ObservableTransformer {
it
.withLatestFrom(
observable,
BiFunction<U,T,Pair<U,Boolean>> {
u, t -> Pair(u,biFunction.apply(u,t))
})
.filter { it.second }
.map { it.first }
}
}
fun <T,U> Observable<U>.filterByLatestFrom(observable: Observable<T>, biFunction: BiFunction<U, T, Boolean>) : Observable<U> =
this.compose(FilterByLatestFrom(observable,biFunction).filter())
最佳答案
您的伪运算符filterByLatestFrom
很好,问题出在测试之内,PublishSubject
将仅发出后续项,因此,在您的最后一次订阅(“结果AC”)中,observableB
仅发出2,因为observableC
已经发出3,并且将不要将其重播为observableB
(使用merge
)。
只需将observableC.onNext(3)
移到最后一个订阅(最后一行)之后,即可看到预期的行为。
编辑:
就像您确实解决了相同的问题一样,也更改为PublishSubject
(主题将重播新订阅的最后一个值)
关于kotlin - 可以通过LatestFrom值观察到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347861/
我需要类似于 withLatestFrom 的东西,对应于下图: ---------A-----------------B-- -1-2-3------4------5-6-7-8---- -----
我有一个效果是从参数中获取最新的并将其传递到一个 exhaustMap 中,然后调用一个服务。 @Effect() loadPlansOnParams$ = this.actions$.pipe(
在 Rxjs 6 之前我们可以这样做: interface TypeA { payload: any; } source$.pipe( withLatestFrom(source2$, (so
我是一名优秀的程序员,十分优秀!