java - RxJava : Return an Observable after some delay

标签 java rx-java

我是 RxJava 新手,需要一些帮助来完成我的任务。

1.

我有一项服务,应该以每秒一个的速度绘制形状,并返回具有该形状的 Observable。这意味着,方法应在请求后一秒后返回形状。毫不拖延地它就起作用了。有人告诉我要使用计时器,但实现起来遇到困难。

我尝试使用类似的东西,但它没有返回任何内容:

public Observable<PaintedCircle> paint(Shape shape) {
        return Observable
                .timer(1, TimeUnit.SECONDS)
                .flatMap(x -> Observable.just(new PaintedCircle(shape.getSize())));
    }

当我在没有 flatMap 的情况下执行此操作时,它会立即返回对象。

2.

我的制作人生成了一个包含一定数量形状对象(圆形和正方形)的列表。我需要扔掉太小的圆圈,绘制形状(第一个问题中描述的服务),然后将形状放入“盒子”中 - 每个盒子按绘制后返回的顺序放入 5 block 。然后每个盒子的所有形状都应该打印到控制台。

问题:可以在公共(public)流中完成吗?怎么办?

我像这样开始了直播,但需要帮助才能继续:

Producer producer = new Producer();
        Observable.from(producer.produceShapes(20))
                .filter(shape -> shape instanceof Square || shape instanceof Circle && shape.getSize() > CIRCLE_MIN_SIZE)
                .flatMap(shape -> shape.getPaintingService().paint(shape));
//                .subscribe(System.out::print);
    }

最佳答案

我不确定你的第一个问题,但如果你想每秒发出一个值,请查看 interval 运算符:timer 将发出一次第一秒后,然后完成。 intervale 将每秒发出一次(如果您不终止流,则将永远完成)

 public Observable<PaintedCircle> paint(Shape shape) {
    return Observable.interval(1, TimeUnit.SECONDS)  
                     .map(x -> new PaintedCircle(shape.getSize());
}

请注意:在这种情况下,可以使用 map 代替 flatMap

对于第二个问题,您可以查看运算符 buffer :例如,您可以缓冲 5 个元素的列表中的项目

    Producer producer = new Producer();
    Observable.from(producer.produceShapes(20))
              .filter(shape -> shape instanceof Square || shape instanceof Circle && shape.getSize() > CIRCLE_MIN_SIZE)
             .flatMap(shape -> shape.getPaintingService().paint(shape));
             .buffer(5)
             // shapes will be a list of 5 shape
             .map(shapes -> new Box(shapes))
             .subscribe(box -> {
                  System.out.println("BOX ---> " + box.getName());
                  box.getShapes().foreach(System.out::println);
             });

关于java - RxJava : Return an Observable after some delay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41100118/

相关文章:

java - 如何将 completablefuture 转换为 Rxjava?

java - 如何在 RxJava 中处理 dispose 而不会出现 InterruptedException

java - ASM 4.0树API : mapping of bytecodes in InsnNodes?

azure - 如何访问远程hadoop系统(Azure上的沙箱)

java - 列出 Spring Security 中的用户

android - 使用 RxLoader 进行 Espresso 测试

java - 从 rx 链返回方法中的值

java - 使用 jsoup 提取 https url

java - 如何使用computeIfAbsent()在HashMap中缓存数据?

java - RxJava - 如何使用内部 "toBlocking"调用测试函数