2016-12-12 5 views
1

私はRxJavaを初めて使用しています。RxJava:遅れてObservableを返す

1.

は、私は秒速1で図形を描くと、その形状で観察を返す必要がサービスを提供しています。それは、要求後1秒後に形状を返すことを意味します。遅滞なく、それは動作します。タイマーを使うように言われましたが、実装に問題があります。

私はそのような何かを使用しようとしましたが、それは何も返しません:

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

私はflatMapせずにそれを行うと、それはすぐにオブジェクトを返します。

マイプロデューサは、形状オブジェクト(丸および四角)のいくつかの量のリストを生成します。私はあまりにも小さな円を投げ捨て、形をペイント(最初の質問に記載されているサービス)し、形を「箱」に入れなければなりません。その後、各ボックスのすべての図形をコンソールに印刷する必要があります。

質問:共通のストリームで行うことはできますか?どうやって?

私はこのような流れを始めたが、上に行くために助けが必要:

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

答えて

2

私はあなたの最初の質問を理解するためにSHUREていますが、値は各秒を発するようにしたい場合は、見ていませんよinterval演算子:timerは、最初の2秒後に1回だけ発光し、次に完了します。 intervaleは各秒を放出する(と意志決して完全にあなたのストリームを終了しない場合)

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

はご注意:この場合には、mapは、2番目の質問についてflatMap

の代わりに使用することができます、あなたは、オペレータbufferを見ることができます:あなたは一例

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

、ありがとう、あなたが2番目の質問たくさんで私を助けたために5つの要素のリスト内の項目をバッファリングすることができます!最初の質問について:サービスが遅れて(この場合は1秒後に)私に価値を与えることを望みます。 –

+0

これは、私のメインストリームからサークルにペイントするサービスを求めています。 –

関連する問題