是否有一个 Observable 可以发出多个 0 参数?

Is there an Observable which can make multiple 0 argument emissions?

我有一个 Observable 每半秒发射一次。当这个 Observable 发射时,我不关心发射的对象。

在这种情况下,使用 Completable 是不够的,因为 Completable 只能发出一个零参数。

这是我目前使用的,效果很好,但不完善

compositeDisposable.add(
    Observable.interval(500L, TimeUnit.MILLISECONDS)
    .timeInterval()
    .observeOn(AndroidSchedulers.mainThread())
    .flatMap(longTimed -> {
        if (emissionBoolean) {
            //todo: find an observable that can emit 0 arguments
            return Observable.just(true);
            }
        return Observer::onComplete;
        })
    .subscribe(wishIWasAZeroArgumentBoolean -> {
        onTick();
        }));

这就是我想要的订阅内容

.subscribe(() -> {
    onTick();
}));

我认为这是一个有效的问题。 Maybe 无法使用,因为 Maybe 不会多次发出。 _ 不能在 Java 9 或更高版本中用作参数名称。

您无法发送 "empty" 通知。 RxJava wiki 建议使用 Object 以防您想显式忽略发出的值。例如:

compositeDisposable.add(
    Observable.interval(500L, TimeUnit.MILLISECONDS)
    .timeInterval()
    .observeOn(AndroidSchedulers.mainThread())
    .flatMap(longTimed -> {
        if (emissionBoolean) {
            //todo: find an observable that can emit 0 arguments
            return Observable.just(new Object());
        }
        return Observable.empty()
    })
    .subscribe(object -> { // you still need to declare though.
        onTick();
    }));


另外,如果可以切换到Kotlin,代码会更简洁,因为在Kotlin中,如果只有一个参数,则不需要显式声明参数名称。

compositeDisposable.add(
    Observable.interval(500L, TimeUnit.MILLISECONDS)
    .timeInterval()
    .observeOn(AndroidSchedulers.mainThread())
    .flatMap {
        if (emissionBoolean) {
            Observable.just(Any())
        } else {
            Observable.empty<Any>()
        }}
    .subscribe {
        onTick()
    }