Java 发射后取消订阅间隔

Java 发射后取消订阅间隔,java,rx-java,rx-java2,Java,Rx Java,Rx Java2,我有一个代码,我在其中设置一个间隔,直到一个条件完成,然后在订阅中返回结果 但由于是一个间隔,订阅将继续 我在想,一旦收到某个可观察的间隔,是否有办法取消订阅 这是密码 Subscription subscriber = Observable.interval(0, 5, TimeUnit.MILLISECONDS) .map(i -> eventHandler.getProcessedEvents()) .filter(ev

我有一个代码,我在其中设置一个间隔,直到一个条件完成,然后在订阅中返回结果

但由于是一个间隔,订阅将继续

我在想,一旦收到某个可观察的间隔,是否有办法取消订阅

这是密码

Subscription subscriber = Observable.interval(0, 5, TimeUnit.MILLISECONDS)
                .map(i -> eventHandler.getProcessedEvents())
                .filter(eventsProcessed -> eventsProcessed >= 10)
                .doOnNext(eventsProcessed -> eventHandler.initProcessedEvents())
                .doOnNext(eventsProcessed -> logger.info(null, "Total number of events processed:" + eventsProcessed))
                .subscribe(t -> resumeRequest(asyncResponse));
        new TestSubscriber((Observer) subscriber).awaitTerminalEvent(10, TimeUnit.SECONDS);
subscriber.unsubscribe();
现在作为一个黑客,我使用定时器,然后取消订阅,但这很糟糕


关于

您可以先使用
操作符

Subscription subscriber = Observable.interval(0, 5, TimeUnit.MILLISECONDS)
                .map(i -> eventHandler.getProcessedEvents())
                .first(eventsProcessed -> eventsProcessed >= 10)
                .doOnNext(eventsProcessed -> eventHandler.initProcessedEvents())
                .doOnNext(eventsProcessed -> logger.info(null, "Total number of events processed:" + eventsProcessed))
                .subscribe(t -> resumeRequest(asyncResponse));

而不是过滤器。这可确保在满足条件的情况下,仅获得一次排放。请注意,如果您的条件interval Observable在未满足条件的情况下终止,您将得到一个异常

你的情况如何?间隔是询问事件的数量。只有通过过滤器才能进入下一步