[英]How to Make an Observable that Emits Combined Items Emitted by Another Observable in RxJava 2?
我有一個發出隨機位/布爾值的 Observable。 我需要制作另一個 Observable 來組合這些隨機位來創建和發出隨機整數。 每次底層 Observable 發出一個位時,這個 Observable 將該位附加到一個位串,一旦該位串達到特定長度,這個 Observable 將其轉換為 integer 並發出。
這是插圖:
以下是我使用 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;
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.