5

私は RxJava を使用しており、次の 2 つのことを行う必要があります。

  • から放出された最後の要素を取得しますObservable
  • が呼び出されたかどうかを判断するonError、vs.onCompleted

lastand (これは実際に必要な動作です) の使用を検討しましたが、最後の要素lastOrDefaultを非表示にすることはできませんでした。onErrorObservable を 2 回使用しても問題ありません。1 回はlast値を取得するため、もう 1 回は完了ステータスを取得するためですが、これまでのところ、独自の を作成することによってのみこれを達成できましたObserver

public class CacheLastObserver<T> implements Observer<T> {

    private final AtomicReference<T> lastMessageReceived = new AtomicReference<>();
    private final AtomicReference<Throwable> error = new AtomicReference<>();

    @Override
    public void onCompleted() {
        // Do nothing
    }

    @Override
    public void onError(Throwable e) {
        error.set(e);
    }

    @Override
    public void onNext(T message) {
        lastMessageReceived.set(message);
    }

    public Optional<T> getLastMessageReceived() {
        return Optional.ofNullable(lastMessageReceived.get());
    }

    public Optional<Throwable> getError() {
        return Optional.ofNullable(error.get());
    }
}

私は自分で を作成することに問題はありませんObserverが、Rx は「完了前に発行された最後の要素を取得する」というこのユースケースをより適切に満たすことができるはずだと感じています。これを達成する方法についてのアイデアはありますか?

4

4 に答える 4