在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 :(得分: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 :(得分:1)
我建议反对这一点,因为它只是模糊了实际发生的事情。
使用filter
内联更简洁,更易读:
.filter(StringUtils::isNotBlank)
这来自Apache Commons-Lang,但您可以轻松地实现自己的实现。