RxJava 2重播最后一项匹配谓词?

时间:2018-08-29 05:16:50

标签: rx-java2

我该如何组成一个像replay这样的运算符来重播与谓词匹配的最后一个项目,然后重播所有所有个将来的项目?

例如,如果一个热的可观察对象发出A, B, C, D, E, F并且我的谓词与元音匹配,则在CD之间加入的订户应该收到A, D, E, F

1 个答案:

答案 0 :(得分:0)

我只是个鸡蛋,但这是我想出的要重播单个项目的东西:

public static <T> Observable<T> replay(final Observable<T> observable,
                                final Predicate<? super T> predicate) {
    final AtomicReference<T> mLastMatch = new AtomicReference<>();
    return observable.map(e -> {
        if (predicate.test(e)) {
            mLastMatch.set(e);
        }
        return e;
    })
    .startWith(Observable.defer(() -> {
        final T t = mLastMatch.get();
        return t == null ? Observable.empty() : Observable.just(t);
    }));
}