Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何合并两个独立的流,缓冲区填充的数据,并在一段时间后将其包含到其中_Kotlin_Rx Java_Rx Java2 - Fatal编程技术网

Kotlin 如何合并两个独立的流,缓冲区填充的数据,并在一段时间后将其包含到其中

Kotlin 如何合并两个独立的流,缓冲区填充的数据,并在一段时间后将其包含到其中,kotlin,rx-java,rx-java2,Kotlin,Rx Java,Rx Java2,我试图测试这样的情况: val list1 = listOf(SomeClass1("1", 1), SomeClass1("2", 2), SomeClass1("3", 3)) val list2 = listOf(SomeClass2(5.00), SomeClass2(4.00), SomeClass2(6.00)) val someClass1Observable = Observable .fromIterable(list1)

我试图测试这样的情况:

  val list1 = listOf(SomeClass1("1", 1), SomeClass1("2", 2), SomeClass1("3", 3))
    val list2 = listOf(SomeClass2(5.00), SomeClass2(4.00), SomeClass2(6.00))

    val someClass1Observable = Observable
            .fromIterable(list1)
            .zipWith(Observable.interval(2, TimeUnit.SECONDS),
                    BiFunction { item: SomeClass1, _: Long -> item })



    val someClass2Observable = Observable
            .fromIterable(list2)
            .zipWith(Observable.interval(1, TimeUnit.SECONDS),
                    BiFunction { item: SomeClass2, _: Long -> item })



    someClass1Observable.subscribe {
                Log.v("someClass1", it.toString())
            }

    someClass2Observable.subscribe {
                Log.v("someClass2", it.toString())
            }


    Observable.merge(someClass1Observable, someClass2Observable)
            .buffer(10, TimeUnit.SECONDS)
            .delay(10, TimeUnit.SECONDS)
            .doOnSubscribe { Log.v("parentObservable", "STARTED") }
            .subscribe { t: MutableList<Parent> ->
                Log.v("parentObservable", "onNext")
                t.forEach { Log.v("onNext", it.toString()) }
            }

    Thread.sleep(13000)

    someClass1Observable.subscribe {
        Log.v("someClass1", it.toString())
    }

    someClass2Observable.subscribe {
        Log.v("someClass2", it.toString())
    }
我有两个班级,都是从同一个家长那里延伸出来的

我正在为每个类创建和观察项目列表:

val listSomeClass1 = ArrayList<SomeClass1>()
val listSomeClass2 = ArrayList<SomeClass2>()

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

fun populateJust2() {
    listSomeClass2.add(SomeClass2(23.00))
    listSomeClass2.add(SomeClass2(24.00))
    listSomeClass2.add(SomeClass2(25.00))
}

populateItemsSomeClass1()
populateItemsSomeClass2()
在这里,我想合并它们的发射,缓冲它,并在10秒后订阅它:

      Observable.merge(someClass1Observable, someClass2Observable)
            .buffer(10, TimeUnit.SECONDS)
            .doOnSubscribe { Log.v("parentObservable", "STARTED") }
            .subscribe { t: MutableList<Parent> ->
                Log.v("parentObservable", "onNext")
                t.forEach { Log.v("onNext", it.toString()) }
            }
Observable.merge(someClassObservable,someClass2Observable)
.缓冲区(10,时间单位。秒)
.doOnSubscribe{Log.v(“parentObservable”,“STARTED”)}
.subscribe{t:MutableList->
Log.v(“parentObservable”、“onNext”)
t、 forEach{Log.v(“onNext”,it.toString())}
}
然而,观测值并没有像我预期的那样在10秒后开始,而是在数据准备就绪的情况下立即开始。 如何模拟这样的情况,我将收集2个单独的流,10秒后我将能够获得收集的数据

我必须指出我不想使用任何主题。

更新

我做过这样的事:

  val list1 = listOf(SomeClass1("1", 1), SomeClass1("2", 2), SomeClass1("3", 3))
    val list2 = listOf(SomeClass2(5.00), SomeClass2(4.00), SomeClass2(6.00))

    val someClass1Observable = Observable
            .fromIterable(list1)
            .zipWith(Observable.interval(2, TimeUnit.SECONDS),
                    BiFunction { item: SomeClass1, _: Long -> item })



    val someClass2Observable = Observable
            .fromIterable(list2)
            .zipWith(Observable.interval(1, TimeUnit.SECONDS),
                    BiFunction { item: SomeClass2, _: Long -> item })



    someClass1Observable.subscribe {
                Log.v("someClass1", it.toString())
            }

    someClass2Observable.subscribe {
                Log.v("someClass2", it.toString())
            }


    Observable.merge(someClass1Observable, someClass2Observable)
            .buffer(10, TimeUnit.SECONDS)
            .delay(10, TimeUnit.SECONDS)
            .doOnSubscribe { Log.v("parentObservable", "STARTED") }
            .subscribe { t: MutableList<Parent> ->
                Log.v("parentObservable", "onNext")
                t.forEach { Log.v("onNext", it.toString()) }
            }

    Thread.sleep(13000)

    someClass1Observable.subscribe {
        Log.v("someClass1", it.toString())
    }

    someClass2Observable.subscribe {
        Log.v("someClass2", it.toString())
    }
val list1=listOf(SomeClass1(“1”,1),SomeClass1(“2”,2),SomeClass1(“3”,3))
val list2=listOf(一些类别2(5.00),一些类别2(4.00),一些类别2(6.00))
val=可观察到的
.fromIterable(列表1)
.zipWith(可观察的时间间隔(2,时间单位秒),
双功能{item:SomeClass1,ux:Long->item})
val SomeClass2可观测=可观测
.fromIterable(列表2)
.zipWith(可观察的时间间隔(1,时间单位秒),
双功能{item:SomeClass2,uz:Long->item})
订阅{
Log.v(“someClass1”,it.toString())
}
someClass2Observable.subscribe{
Log.v(“someClass2”,it.toString())
}
可观察。合并(someClassObservable,someClass2Observable)
.缓冲区(10,时间单位。秒)
.延迟(10,时间单位。秒)
.doOnSubscribe{Log.v(“parentObservable”,“STARTED”)}
.subscribe{t:MutableList->
Log.v(“parentObservable”、“onNext”)
t、 forEach{Log.v(“onNext”,it.toString())}
}
线程。睡眠(13000)
订阅{
Log.v(“someClass1”,it.toString())
}
someClass2Observable.subscribe{
Log.v(“someClass2”,it.toString())
}
在这里,我只想模拟两个无限流的someClass1和someclass2观测值,对于合并观测值也是如此


同样,我希望能够合并这两个流,缓冲区填充的数据,并在10秒后对其进行处理。如果在10秒后,这两个流将再次填充一些数据,则merge Observable应该清除以前的缓冲区,并且应该再次缓冲新数据并在10秒后发出,依此类推。但是,我的代码没有按我预期的那样工作,我需要做哪些更改才能使其符合我的描述?

我想您正在寻找
延迟
操作符

耽搁 将可观察到的排放物在时间上向前移动特定量

比如:

.delay(10, TimeUnit.SECONDS)

谢谢你的建议,虽然很接近,但不是回答我问题的答案,请参阅我更新的问题,我做错了什么?