2017-12-12 10 views
0

Observableで各アイテムを検証し、条件が失敗した場合にエラーを返す方法を教えてください。
は今、私の中にifswitchMapを使用していますが、このソリューションは非常にいいではないです:Observable各アイテムの有効性を確認

Observable.just(1, 2, 3, -1, 4) 
    .switchMap(x -> { 
     if (x >= 0) { 
      return Observable.just(x); 
     } else { 
      return Observable.error(new Exception("Input value should be positive")); 
     } 
    }) 
    .subscribe(
     x -> System.out.printf("value=%d\n", x), 
     err -> System.out.printf("error: %s\n", err.getMessage()) 
    ); 

が、私はこれの代わりに任意の組み込みメソッドを使用することはできますか?

+0

はフィルタですか? –

+0

@PhoenixWang 'filter'は単に" bad "値を落としますが、私は例外 – g4s8

+0

が必要です。1.例外をフィルターに投げてオペレータがエラーを送出します。私はそれが反応的なストリームのための良い実装ではないと思う。例外は、ストリームをもう聞く/購読できないことを意味します。例外の代わりにErrorStateを使用することをお勧めします。たとえば、値には、検証結果を示す値または例外が含まれています。 @ g4s8 –

答えて

1

doOnNext()を使用して例外をスローすることができます。

Observable.just(1, 2, 3, -1, 4) 
     .doOnNext(x -> { 
      if (x < 0) throw Exception("Input value should be positive"); 
     }) 
     .subscribe(
      x -> System.out.printf("value=%d\n", x), 
      err -> System.out.printf("error: %s\n", err.message) 
     ); 
関連する問題