簡體   English   中英

在 RxJava 2 中,如何使一個 Observable 發出另一個 Observable 發出的組合項?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM