0
我的任务是在Producer中产生一定数量的随机对象(形状 - 圆形或正方形),将它们打印到控制台并在消费者中使用它们。为了生成随机对象,我使用抽象类Shape
中的方法getShape
,然后在创建Observable时使用defer()
来获取每个新对象。RxJava:正确地返回来自Observable的随机对象
对于印刷对象我试图用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()
作品两次 - 在打印过程中的形状和而深受消费者要求他们,使消费者成为不同的形状。
编辑:我试图删除.doOnNext(System.out::print)
并打印getShape()
方法中的对象,然后将其提供给生产者,但消费者仍然变成不同的形状。
如何解决?我如何创建形状,打印它们并向消费者提供相同的形状?
会发生什么事,如果你删除延迟通话?重复刚才的呼叫还是只呼叫一次? – rob
它会重复。形状对象将只创建一次,并在每次调用时返回。 –
这就是我的想法: - 幸运的是koperko更了解他的rxjava :-) – rob