2017-04-11 5 views
4

Observable<>,Single<>,Maybe<>,Flowable<>をrx-javaに入れても構いませんか?
など。デコレート可

public final class NonEmptyStringSource extends Observable<String> { 

    private final Observable<String> source; 

    public NonEmptyStringSource(final Observable<String> source) { 
     this.source = source.filter(s -> s.length() > 0); 
    } 

    @Override 
    protected void subscribeActual(final Observer<? super String> observer) { 
     this.source.subscribe(observer); 
    } 
} 

このアプローチにはいくつかの落とし穴がありますか?
安全に使用できますか?

+0

ストリームには、10kブレーク偶数のしきい値があります。あなたの観測可能なストリームがそれより小さい場合、パフォーマンスペナルティを支払うでしょう – efekctive

+1

Rx2はヌル値をサポートしていないので、 's!= null'は冗長です。 – tynn

答えて

3

1.xとは異なり、2.xのこのパターンはペナルティがなく、標準演算子の実装方法とほとんど同じです。必要に応じて、あなたの代わりにObservableTransformerを実装することもできます。

ObservableTransformer<String, String> t = 
    upstream -> upstream.filter(s -> s.length() > 0); 

Observable.fromArray("a", "b", "", "d", "", "f") 
.compose(t) 
.subscribe(System.out::println, Throwable::printStackTrace); 
1

それだけで実際に何が起こっているかを難読化として、私は、これに対して助言します。ただ、filterインラインを使用して

は、よりクリーンで読みやすいです:

.filter(StringUtils::isNotBlank) 

これは、Apache Commonsの-ラングから来ていますが、同じように簡単に独自の実装をロールバックすることができます。

関連する問題