如何使一个 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;
})
我有一个随机发射的 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;
})