如何使一个 Observable 发出由 RxJava 2 中另一个 Observable 发出的组合项?

How to Make an Observable that Emits Combined Items Emitted by Another Observable in RxJava 2?

我有一个随机发射的 Observable bits/booleans。我需要创建另一个 Observable 来组合这些随机位来创建和发出随机整数。每次底层 Observable 发出一个位时,这个 Observable 将该位附加到一个位串,一旦该位串达到特定长度,这个 Observable 将其转换为整数并发出它。

插图如下:

以下是我使用 Android LiveData 实现它的方法:

final StringBuilder bitStringBuilder = new StringBuilder();
final MediatorLiveData<Integer> integerLiveData = new MediatorLiveData<>();
integerLiveData.addSource(
        randomSource.getBooleanLiveData(),
        new Observer<Boolean>() {
            @Override
            public void onChanged(Boolean b) {
                bitStringBuilder.append(b ? '1' : '0');
                if (bitStringBuilder.length() == 31) {
                    integerLiveData.setValue(Integer.parseInt(bitStringBuilder.toString(), 2));
                    bitStringBuilder.setLength(0); // clear the bit string builder
                }
            }
        }
);

如何使用 RxJava 2 实现这一点?

缓冲区位:

source
.buffer(31)
.map(bits -> {
    int result = 0;
    for (int b : bits) {
        result = (result << 1) | (b ? 1 : 0);
    }
    return result;
})