2017-04-11 3 views
4

Ist es OK, Observable<>, Single<>, Maybe<>, Flowable<> in RX-Java zu dekorieren?
z. wie folgt:Dekorieren beobachtbar

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

Hat dieser Ansatz einige Tücken?
Ist es sicher in Gebrauch?

+0

Streams haben einen Break-even-Schwellenwert von 10k. Wenn Ihr beobachtbarer Stream kleiner als das ist, zahlen Sie eine Performance-Strafe – efekctive

+1

Rx2 unterstützt keine Null-Werte, daher wäre 's! = Null' überflüssig. – tynn

Antwort

3

Im Gegensatz zu 1.x hat dieses Muster in 2.x keine Nachteile und ist fast so, wie die Standardoperatoren implementiert sind. Je nach Bedarf, können Sie eine ObservableTransformer statt implementieren:

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

ich abraten würde, wie es verschleiert, was eigentlich los ist.

mit nur filter inline ist sauberer und besser lesbar:

.filter(StringUtils::isNotBlank) 

Dieses von Apache Commons-Lang kommt, aber Sie können genauso einfach Ihre eigene Implementierung rollen.