RxJava 學習筆記<六> Inspection

在上一章中,咱們剛剛看到過濾了咱們不關心數據的方法,有時候咱們想要的是關於 sequence 的信息,而不是值自己。咱們如今將介紹一些方法,讓咱們可以對 sequence 進行解釋。java

all

ALl 方法會創建一個 observable 發出的每一個值都符合一個標準。下面是例子:函數

public final Observable<java.lang.Boolean> all(Func1<? super T,java.lang.Boolean> predicate)

輸出:spa

該方法的展現一個有趣的事實是,它返回單個值的 observable ,而不是直接返回布爾值。這是由於不知道須要多長時間才能肯定結果是否正確。即便它可以儘快完成,這可能須要花費源 sequence 自己的時間。一旦一個 item 失敗,謂詞就會發出false。另外一方面,在源 sequence 完成並檢查全部項以前,不能發出true值。在 observables 範圍內返回決策是使操做非阻塞的一種方便的方法。在下一個示例中,咱們能夠儘快看到全部的failing:索引

輸出:事件

若是源 observable 發出錯誤,則 all 方法變得無關,而且錯誤經過,終止序列。element

輸出:it

 

可是,若是謂詞失敗,則發出false並終止序列。即便源 observable 在此以後失敗,也會按照 Rx 契約的要求忽略事件(終止事件後沒有事件)。io

輸出:方法

exists

EXISTS方法若是由該 observable 發出的任何一個值使謂詞爲真,則該方法將發出true。im

輸出:

若是咱們這麼寫,你也知道會輸出什麼吧

Observable<Integer> values = Observable.range(0, 4);

isEmpty

這個操做的結果是個boolean,指示 observable 的值發出是否在完成以前。

輸出:

一旦發出第一個值,就會創建false,一旦可觀察到的源終止,就會返回true。

contains

該方法包含創建一個特定的元素是不是由一個 observable 發出的。contains將使用Object.equals方法來判斷相等。

 

輸出:

在咱們使用 contains(4L) 的換成 contains(4),那麼將不會打印出什麼,由於在java中 4 和 4L 是不想等的。可是咱們的 observable 是無限的,因此你知道的。

defaultIfEmpty

若是一個空 sequence 會給您帶來問題,您能夠強制一個 observable 在完成時發出一個值,若是它在完成以前沒有發出任何值的話。

輸出:

只有在未出現其餘值且僅在成功完成時纔會發出默認值。若是源不是空的,那麼結果就是能夠觀察到的源。在發生錯誤的狀況下,默認值不會在錯誤以前發出。

輸出:

elementAt

您可使用 ElementA t方法從 observable 元素中選擇一個元素

輸出:

若是超出範圍,會報出 java.lang.IndexOutOfBoundsException 錯誤,哦們也能夠提供一個默認值來規避這種異常。

輸出:

sequenceEqual

本章的最後一個 operator 經過比較同一索引處的值來肯定兩個序列是否相等。序列的大小和值必須相等。該函數要麼使用Object.Equals,要麼使用您提供的函數來比較值。

輸出:

上面這個例子,若是使用 Object.equals ,那麼結果就是 false 啦。

失敗不是比較的一部分。一旦任一序列失敗,所產生的可觀察的結果就會錯誤。

輸出:

相關文章
相關標籤/搜索