2017-04-11 161 views
4

可以在rx-java中修飾Observable<>,Single<>,Maybe<>,Flowable<>嗎?
例如像這樣:裝飾可觀察

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不支持空值,因此'!= 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的共享郎,但你可以很容易地推出自己的實現。