【问题标题】:How to create infinite interval Observable that will emit new Object every time interval?如何创建将在每个时间间隔发出新对象的无限间隔 Observable?
【发布时间】:2017-11-19 00:56:09
【问题描述】:

我正在尝试创建一个每秒都会发出新对象的 Observable。 所以现在我只是压缩一个 Observable,它从列表中发出有限数量的对象,间隔 Observable。

   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秒就会有一些带有一些参数的类SomeClass1的新对象?

【问题讨论】:

  • 如何确定nth SomeClass1 对象的实际值?它是否仅取决于n 的值,即。 e.在它在流中的位置?它是否依赖于先前发出的项目?
  • @david.mihola 如果您有兴趣,请查看我的回答我的意图是什么

标签: kotlin rx-java rx-java2


【解决方案1】:

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

 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())  }

}

【讨论】:

  • 好的,在这种情况下,我会将答案更改为:Observable.interval(1, TimeUnit.SECONDS).map({SomeClass("$it", it)})。那是因为间隔发出连续的整数,从 0 开始 - 你不需要任何外部可变状态。此外,几乎不需要内部只有justflatMap,在这种情况下只需使用map
  • @david.mihola 谢谢,你认为这会导致我的其他问题出现问题吗:stackoverflow.com/questions/47368711/…
猜你喜欢
  • 1970-01-01
  • 2019-08-22
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多