【问题标题】:Lazy random generator as observable可观察到的惰性随机生成器
【发布时间】:2017-02-21 15:59:25
【问题描述】:

我需要将随机生成器编写为可观察的。观察者会在很长一段时间内对下一个值做一些事情。因此,我只想在观察者需要时才发出新的随机数,或者可能是两个额外的数字,但仅此而已。

怎么做?

附:如果重要,我会使用 Java。

【问题讨论】:

    标签: rx-java reactivex


    【解决方案1】:

    当消费者有需求时,您可以使用fromCallablerepeat 来获得新值。

    例如:

    Random random = new Random();
    Observable.fromCallable(() -> random.nextDouble())
    .repeat()
    .map(rnd -> {
        // do something with the random number
        return rnd * 2;
    }
    .take(50)
    .subscribe(System.out::println);
    

    【讨论】:

      【解决方案2】:

      使用鲜为人知的SyncOnSubscribe

      Observable
      .create(SyncOnSubscribe.createStateless(observer -> observer.onNext(random.nextDouble))
      .map(...)
      .take(...)
      .subscribe(...)
      

      这将在背压下正常工作。

      【讨论】:

      • 对于 RxJava 2,这已被替换为 Flowable.generateFlowable.from...。
      猜你喜欢
      • 2011-05-27
      • 2019-07-17
      • 1970-01-01
      • 2013-08-13
      • 2016-04-20
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多