装饰可观察的

时间:2017-04-11 17:28:07

标签: java rx-java decorator rx-java2

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

这种方法有一些缺陷吗? 使用安全吗?

2 个答案:

答案 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,但您可以轻松地实现自己的实现。