RxJava:从Observable正确返回随机对象
我的任务是在Producer中生成给定数量的随机对象(形状-圆形或方形),将它们打印到控制台,然后在Consumer中使用它们。为了生成随机对象,我在抽象类RxJava:从Observable正确返回随机对象,java,rx-java,Java,Rx Java,我的任务是在Producer中生成给定数量的随机对象(形状-圆形或方形),将它们打印到控制台,然后在Consumer中使用它们。为了生成随机对象,我在抽象类Shape中使用方法getShape,然后在创建可观察对象时,我使用defer()获取每次新对象 对于打印对象,我尝试使用doOnNext: Observable<Shape> produceShapes(int amount) { System.out.println("Produced following sh
Shape
中使用方法getShape
,然后在创建可观察对象时,我使用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);
}
可观察的产品形状(整数金额){
System.out.println(“生成以下形状:”);
返回Observable.defer(()->Observable.just(Shape.getShape()))
.doOnNext(系统输出::打印)
.重复(数量);
}
消费者方法通常是可以观察到的。只是(newproducer().produceShapes(10))…
问题是,defer()
工作两次——打印形状和消费者请求形状时,因此消费者变成了不同的形状
编辑:我试图删除.doOnNext(System.out::print)
并在getShape()
方法中打印对象,然后将其交给生产者,但消费者仍然会变成不同的形状
怎么解决呢??如何创建形状、打印形状并将相同的形状提供给消费者?我不明白,为什么要使用“延迟”。延迟操作符为每个订户创建新的可观察对象。如果您只想要数量的形状,请尝试以下方法:
Observable<Shape> produceShapes(int amount) {
System.out.println("Produced following shapes:");
return Observable.range(1, amount)
.map(index -> Shape.getShape())
.doOnNext(System.out::print);
}
可观察的产品形状(整数金额){
System.out.println(“生成以下形状:”);
可观察的回报范围(1,金额)
.map(index->Shape.getShape())
.doOnNext(系统输出::打印);
}
我不明白,为什么要使用延迟。延迟操作符为每个订户创建新的可观察对象。如果您只想要数量的形状,请尝试以下方法:
Observable<Shape> produceShapes(int amount) {
System.out.println("Produced following shapes:");
return Observable.range(1, amount)
.map(index -> Shape.getShape())
.doOnNext(System.out::print);
}
可观察的产品形状(整数金额){
System.out.println(“生成以下形状:”);
可观察的回报范围(1,金额)
.map(index->Shape.getShape())
.doOnNext(系统输出::打印);
}
如果删除延迟呼叫会发生什么?刚才的电话会被重复还是只会被重复一次?它会被重复。shape对象只创建一次,每次调用都返回。这就是我的想法:-/幸运的是koperko更了解他的rxjava:-)如果删除延迟调用会发生什么?刚才的电话会被重复还是只会被重复一次?它会被重复。shape对象只创建一次,每次调用都返回。这就是我的想法:-/幸运的是koperko更了解他的rxjava:-)