2017-11-18 216 views
1

我想创建一个Observable,它会每秒发射一个新对象。 所以现在我只是用一个间隔Observable压缩一个Observable,它从列表中发出有限数量的对象。如何创建无限的时间间隔Observable每隔一段时间就会发射一个新的Object?

val list1 = mutableListOf<SomeClass1>(
      SomeClass1("1", 1), SomeClass1("2", 2), SomeClass1("3", 3), 
      SomeClass1("4", 4), SomeClass1("5", 5), SomeClass1("6", 6), 
      SomeClass1("7", 7), SomeClass1("8", 8), SomeClass1("9", 9) 
    ) 

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

因此,如何真正让这无限的,在每2秒都有将emiited类SomeClass1的新对象与某些参数的方法吗?

+0

你如何确定'n'th的'SomeClass1'对象的实际值?它仅取决于'n'的价值,我。即在流中的位置?它取决于之前发射的物品吗? –

+0

@ david.mihola检查我的答案,如果你有兴趣我的意图是什么 – Konrad

回答

0

这里是我的问题的答案,满足我:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 

    var counter = 0 

    val periodicSomeClass1 = Observable.interval(1, TimeUnit.SECONDS) 
      .flatMap(
        { 
         counter++ 
         Observable.just(SomeClass1("$counter", counter)) 
        } 
      ) 


    periodicSomeClass1.subscribe { t: SomeClass1 -> Log.v("periodicSomeClass1", t.toString()) } 

} 
+0

好的,在这种情况下,我会改变答案:'Observable.interval(1,TimeUnit.SECONDS).map({SomeClass(“$ it “,it)})'。这是因为间隔发出连续的整数,从0开始 - 你不需要任何外部可变状态。而且,只有'just'的flatMap'实际上是不需要的,在这种情况下只需使用'map'即可。 –

+0

@ david.mihola谢谢,你认为这导致与我的其他问题在这里的问题:https://stackoverflow.com/questions/47368711/why-i-have-undesired-log-output-when-merging-2-可观察到的一体? – Konrad

相关问题