簡體   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