gpt4 book ai didi

java - RxJava : return random objects from Observable correctly

转载 作者:行者123 更新时间:2023-12-02 03:10:27 25 4
gpt4 key购买 nike

我的任务是在 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);
}

Consumer 方法是通常的 Observable.just(new Producer(). ProduceShapes(10))...

问题是 defer() 工作两次 - 打印形状和消费者请求形状时,因此消费者会变成不同的形状。

编辑:我尝试删除 .doOnNext(System.out::print) 并在 getShape() 方法中打印对象,然后再将其交给 Producer,但是消费者仍然会变成不同的形状。

如何解决?如何创建形状、打印它们并将相同的形状提供给消费者?

最佳答案

我不明白,为什么要用defer。 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);
}

关于java - RxJava : return random objects from Observable correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com