RxJava zip使用Android Studio 3.0在Kotlin中遇到IDE错误

我想用Interval Observable创建一个Observable,它包含Observable,Observable包含Observable对象的列表,这样,来自第一个Observable的Observable将会有一定的时间延迟。 这是我的实现:

val just1 = ArrayList() 

填充一些项目

 fun populateJust1() { just1.add(SomeClass1("23", 23)) just1.add(SomeClass1("24", 24)) just1.add(SomeClass1("25", 25)) } populateJust1() 

并以间隔Observable压缩

 Observable.fromIterable(just1) .zipWith(Observable.interval(2, TimeUnit.SECONDS)) { item: SomeClass1, interval: Long -> item } .subscribe(Consumer { someClass1 -> Log.v("someClass1", someClass1.toString()) }) 

然而,IDE,Android Studio 3.0以zipWith运算符为红色,并表示:

所提供的参数都不能调用以下函数。 (((观察者:观察者)→单位)!,((t1:SomeClass1,t2:长)→R)!)其中R不能被推断; U = Long for fun zipWith(other:((observers:Observer)→Unit)!,zipper:((t1:SomeClass1,t2:U)→R)!):Observable! 在io.reactivex.Observable zipWith(ObservableSource!,BiFunction!)中定义,其中R无法推断; U =长! 为了好玩zipWith(其他:ObservableSource!,拉链:BiFunction!):可观察! 定义在io.reactivex.Observable zipWith((Mutable)Iterable!,BiFunction!)其中U,R不能被推断为有趣的zipWith(other:(Mutable)Iterable!,zipper:BiFunction!):Observable! 定义在io.reactivex.Observable zipWith((Mutable)Iterable!,((t1:SomeClass1,t2:Long)→R)!)其中R不能被推断; U = Long for fun zipWith(other:(Mutable)Iterable!,zipper:((t1:SomeClass1,t2:U)→R)!):Observable! 在io.reactivex.Observable中定义

哪里不对? 我刚刚从Java类转换了这个代码,一切都是正确的

Kotlin不能推断出这个zipWithtypes。

使用BiFunction而不是lambda:

 data class SomeClass(val a: String, val b: Int) val list = listOf(SomeClass("1", 1), SomeClass("2", 2)) Observable .fromIterable(list) .zipWith(Observable.interval(2, TimeUnit.SECONDS), BiFunction { item: SomeClass, _: Long -> item }) .subscribe { Log.v("someClass", it.toString()) 

你也可以使用RxKotlin ,附带一些小的包装来隐藏这种噪音。 下面是Single.zipWith的一个例子:

 fun  Single.zipWith(other: SingleSource): Single> = zipWith(other, BiFunction { t, u -> Pair(t,u) })