![](/img/trans.png)
[英]RxJava. Observable.delay work strange (lacks some items at the end)
[英]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.