繁体   English   中英

RxJava:延迟一段时间后返回一个Observable

[英]RxJava: Return an Observable after some delay

我是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件放入盒子中。 然后,应将每个盒子中的所有形状都打印到控制台上。

问题:可以在通用流中完成吗? 怎么样?

我像这样启动了视频流,但需要帮助才能继续:

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);
             });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM