<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                這一節解釋 [`BlockingObservable`](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html) 的子類. 一個阻塞的Observable 繼承普通的Observable類,增加了一些可用于阻塞Observable發射的數據的操作符。 要將普通的`Observable` 轉換為 `BlockingObservable`,可以使用 [`Observable.toBlocking(?)`](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toBlocking()) 方法或者[`BlockingObservable.from(?)`](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#from(rx.Observable)) 方法。 * [**`forEach(?)`**](Subscribe.md) — 對Observable發射的每一項數據調用一個方法,會阻塞直到Observable完成 * [**`first(?)`**](First.md) — 阻塞直到Observable發射了一個數據,然后返回第一項數據 * [**`firstOrDefault(?)`**](First.md) — 阻塞直到Observable發射了一個數據或者終止,返回第一項數據,或者返回默認值 * [**`last(?)`**](Last.md) — 阻塞直到Observable終止,然后返回最后一項數據 * [**`lastOrDefault(?)`**](Last.md) — 阻塞直到Observable終止,然后返回最后一項的數據,或者返回默認值 * [**`mostRecent(?)`**](First.md) — 返回一個總是返回Observable最近發射的數據的iterable * [**`next(?)`**](TakeLast.md) — 返回一個Iterable,會阻塞直到Observable發射了另一個值,然后返回那個值 * [**`latest(?)`**](First.md) — 返回一個iterable,會阻塞直到或者除非Observable發射了一個iterable沒有返回的值,然后返回這個值 * [**`single(?)`**](First.md) — 如果Observable終止時只發射了一個值,返回那個值,否則拋出異常 * [**`singleOrDefault(?)`**](First.md) — 如果Observable終止時只發射了一個值,返回那個值,否則否好默認值 * [**`toFuture(?)`**](To.md) — 將Observable轉換為一個Future * [**`toIterable(?)`**](To.md) — 將一個發射數據序列的Observable轉換為一個Iterable * [**`getIterator(?)`**](To.md) — 將一個發射數據序列的Observable轉換為一個Iterator > 伴隨這個解釋還有一個修改版的彈珠圖,表示阻塞Observable的彈珠圖: ![BlockingObservables](https://box.kancloud.cn/8cf2bb4cdc96280b0d7b385a1a214cbd_1210x570.png) ## BlockingObservable的方法 `BlockingObservable`的方法不是將一個Observable變換為另一個,也不是過濾Observables,它們會打斷Observable的調用鏈,會阻塞等待直到Observable發射了想要的數據,然后返回這個數據(而不是一個Observable)。 要將一個Observable轉換為一個`BlockingObservable`,你可以使用`Observable.toBlocking`或`BlockingObservable.from`方法。 * Javadoc: [Observable.toBlocking()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#toBlocking()) * Javadoc: [BlockingObservable.from(Observable)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#from(rx.Observable)) ### first ![first](https://box.kancloud.cn/848ce6c8488869dd4579bf18b5647c23_1280x630.png) 要獲取`BlockingObservable`的發射物,使用無參數的`first`方法。 * Javadoc: [BlockingObservable.first()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#first()) ### first.p ![first](https://box.kancloud.cn/8de7a4125cae81874dfd745ea701af6f_1280x630.png) 你也可以給`first`方法傳遞一個謂詞函數用于獲取滿足條件的`BlockingObservable`。 * Javadoc: [BlockingObservable.first(Func1)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#first(rx.functions.Func1)) ### firstOrDefault ![firstOrDefault](https://box.kancloud.cn/8383febe489705476bdf09bfe76a2d6f_1280x610.png) 和過濾操作符一樣,如果原始Observable沒有數據,`first`會拋出異常`NoSuchElementException`,`firstOrDefault`會返回一個默認值。 * Javadoc: [BlockingObservable.firstOrDefault()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#firstOrDefault(T)) ### firstOrDefault.p ![firstOrDefault](https://box.kancloud.cn/e5a78ff1983c1681afdd1eb70f45e776_1280x620.png) `firstOrDefault`同樣也接受一個謂詞函數作為參數,用于獲取滿足條件的第一項,如果沒有滿足條件的就返回默認值。 * Javadoc: [BlockingObservable.firstOrDefault(T, Func1)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#firstOrDefault(T,%20rx.functions.Func1)) ### single ![single](https://box.kancloud.cn/dc05e3f3946e54b016f5d6ab4a84a70d_1280x630.png) `single`和`first`類似,但是如果不是正好發射一個數據,會拋出異常`NoSuchElementException`。其它幾個變體的功能也是類似的。 * Javadoc: [single()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#single()) ### single.p ![single](https://box.kancloud.cn/6dffa638b60850fb1399c4e5a0bfce1e_1280x630.png) 同上,接受一個謂詞函數,如果滿足條件的不是正好一個,會拋出異常。 * Javadoc: [single(Func1)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#single(rx.functions.Func1)) ### singleOrDefault ![single](https://box.kancloud.cn/1b462733c6bfdac582ee295337a207b6_1280x630.png) 類似`firstOrDefault`,在為空時返回默認值,超過一個就拋出異常。 * Javadoc: [singleOrDefault(T)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#singleOrDefault(T)) ### singleOrDefault.p ![single](https://box.kancloud.cn/309b8f69662b791b316293de1146e6e1_1280x630.png) 類似`firstOrDefault`,接受一個謂詞函數,如果沒有復合條件的,返回默認值;如果有多個復合條件的,以錯誤通知終止。 * Javadoc: [singleOrDefault(Func1,T)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#singleOrDefault(rx.functions.Func1,%20T)) ### next ![next](https://box.kancloud.cn/0b7c875f257de0a7e32389b04205ff3c_1280x980.png) `next`操作符會阻塞直到`BlockingObservable`返回另外一個值,然后它返回那個值。你可以重復調用這個方法從`BlockingObservable`獲取后續的數據項。以阻塞的方式高效的迭代獲取它的發射物。 `latest`操作符也是類似的,但是它不會阻塞等待下一個值,它立即返回最近發射的數據項,只在Observable還沒有發射任何數據時會阻塞。 * Javadoc: [next()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#next()) * Javadoc: [latest()](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#latest()) ### mostRecent ![mostRecent](https://box.kancloud.cn/ec7ec494ca432b1108b0ddfb901d00b3_1280x980.png) `mostRecent`操作符讓你可以用類似的方式迭代一個`BlockingObservable`,但是它總是立即返回一個值,或者是默認值(如果`BlockingObservable`還沒有發射任何數據),或者是`BlockingObservable`最近發射的數據項。 * Javadoc: [mostRecent(T)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#mostRecent(T)) ### forEach `BlockingObservable`類中也有一個類似的叫作`forEach`的方法。要使用這個方法,你首先需要使用`BlockingObservable.from`方法或`Observable.toBlocking`操作符將原始Observable轉換為一個`BlockingObservable`。 `BlockingObservable.forEach`接受單個函數作為參數,這個函數的作用類似于普通Observable訂閱中的`onNext`函數。`forEach`自身會阻塞知道`BlockingObservable`完成,當它不阻塞時就是完成了,不是通過調用一個回調方法表示它完成了。如果遇到了錯誤它將拋出一個`RuntimeException`(而不是調用一個類似于`onError`的回調方法)。 * Javadoc: [BlockingObservable.forEach(Action1)](http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#forEach(rx.functions.Action1)) #### 參見: * javadoc: <a href="http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html">`BlockingObservable`</a> * javadoc: <a href="http://reactivex.io/RxJava/javadoc/rx/Observable.html#toBlocking()">`toBlocking()`</a> * javadoc: <a href="http://reactivex.io/RxJava/javadoc/rx/observables/BlockingObservable.html#from(rx.Observable)">`BlockingObservable.from()`</a> ## 附錄:相似的阻塞和非阻塞操作符列表 <table> <thead> <tr><th rowspan="2">操作符</th><th colspan="3">執行結果</th><th rowspan="2">Rx.NET等價操作</th></tr> <tr><th>發射多個數據的Observable</th><th>發射單個數據的Observable</th><th>不發射數據的Observable</th></tr> </thead> <tbody> <tr><td><code>Observable.first</code></td><td> 第一項</td><td>單個數據</td><td><i>該元素不存在</i></td><td><code>firstAsync</code></td></tr> <tr><td><code>BlockingObservable.first</code></td><td> 第一項</td><td>單個數據</td><td><i>該元素不存在</i></td><td><code>first</code></td></tr> <tr><td><code>Observable.firstOrDefault</code></td><td> 第一項</td><td>單個數據</td><td>默認數據</td><td><code>firstOrDefaultAsync</code></td></tr> <tr><td><code>BlockingObservable.firstOrDefault</code></td><td> 第一項</td><td>單個數據</td><td>默認數據</td><td><code>firstOrDefault</code></td></tr> <tr><td><code>Observable.last</code></td><td>最后一項</td><td>單個數據</td><td><i>該元素不存在</i></td><td><code>lastAsync</code></td></tr> <tr><td><code>BlockingObservable.last</code></td><td>最后一項</td><td>單個數據</td><td><i>該元素不存在</i></td><td><code>last</code></td></tr> <tr><td><code>Observable.lastOrDefault</code></td><td>最后一項</td><td>單個數據</td><td>默認數據</td><td><code>lastOrDefaultAsync</code></td></tr> <tr><td><code>BlockingObservable.lastOrDefault</code></td><td>最后一項</td><td>單個數據</td><td>默認數據</td><td><code>lastOrDefault</code></td></tr> <tr><td><code>Observable.single</code></td><td><i>非法參數</i></td><td>單個數據</td><td><i>該元素不存在</i></td><td><code>singleAsync</code></td></tr> <tr><td><code>BlockingObservable.single</code></td><td><i>非法參數</i></td><td>單個數據</td><td><i>該元素不存在</i></td><td><code>single</code></td></tr> <tr><td><code>Observable.singleOrDefault</code></td><td><i>非法參數</i></td><td>單個數據</td><td>默認數據</td><td><code>singleOrDefaultAsync</code></td></tr> <tr><td><code>BlockingObservable.singleOrDefault</code></td><td><i>非法參數</i></td><td>單個數據</td><td>默認數據</td><td><code>singleOrDefault</code></td></tr> </tbody> </table>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看