我有一个Observable,它发出随机的位/布尔值。我需要使另一个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实现这一目标?
答案 0 :(得分:3)
缓冲位:
source
.buffer(31)
.map(bits -> {
int result = 0;
for (int b : bits) {
result = (result << 1) | (b ? 1 : 0);
}
return result;
})