2017-11-18 218 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

相關問題