[英]RxJava: return random objects from Observable correctly
我的任务是在Producer中产生给定数量的随机对象(形状-圆形或正方形),将它们打印到控制台,然后在Consumer中使用它们。 为了生成随机对象,我在抽象类Shape
使用了getShape
方法,然后在创建Observable时,我使用defer()
每次获取新对象。
对于打印对象,我尝试使用doOnNext
:
Observable<Shape> produceShapes(int amount) {
System.out.println("Produced following shapes:");
return Observable.defer(() -> Observable.just(Shape.getShape()))
.doOnNext(System.out::print)
.repeat(amount);
}
消费者方法通常是Observable.just(new Producer().produceShapes(10))...
问题是defer()
可以工作两次-在打印形状以及由Consumer请求形状时,Consumer变成了不同的形状。
编辑:我试图删除.doOnNext(System.out::print)
并在将其提供给Producer之前,在getShape()
方法中打印对象,但是Consumer仍然变成不同的形状。
如何解决? 如何创建形状,打印形状并将相同的形状提供给Consumer?
我不明白,您为什么要使用defer。 延迟运算符为每个订户创建新的可观察值。 如果仅需要数量的形状,请尝试以下操作:
Observable<Shape> produceShapes(int amount) {
System.out.println("Produced following shapes:");
return Observable.range(1, amount)
.map(index -> Shape.getShape())
.doOnNext(System.out::print);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.