# 條件和布爾操作
## All
判定是否Observable發射的所有數據都滿足某個條件

傳遞一個謂詞函數給`All`操作符,這個函數接受原始Observable發射的數據,根據計算返回一個布爾值。`All`返回一個只發射一個單個布爾值的Observable,如果原始Observable正常終止并且每一項數據都滿足條件,就返回true;如果原始Observable的任何一項數據不滿足條件就返回False。

RxJava將這個操作符實現為`all`,它默認不在任何特定的調度器上執行。
* Javadoc: [all(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#all(rx.functions.Func1))
## Amb
給定兩個或多個Observables,它只發射首先發射數據或通知的那個Observable的所有數據

當你傳遞多個Observable給`Amb`時,它只發射其中一個Observable的數據和通知:首先發送通知給`Amb`的那個,不管發射的是一項數據還是一個`onError`或`onCompleted`通知。`Amb`將忽略和丟棄其它所有Observables的發射物。

RxJava的實現是`amb`,有一個類似的對象方法`ambWith`。例如,`Observable.amb(o1,o2)`和`o1.ambWith(o2)`是等價的。
這個操作符默認不在任何特定的調度器上執行。
## Contains
判定一個Observable是否發射一個特定的值

給`Contains`傳一個指定的值,如果原始Observable發射了那個值,它返回的Observable將發射true,否則發射false。
相關的一個操作符`IsEmpty`用于判定原始Observable是否沒有發射任何數據。

`contains`默認不在任何特定的調度器上執行。
* Javadoc: [contains(Object)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#contains(java.lang.Object))

RxJava中還有一個`exists`操作符,它通過一個謂詞函數測試原始Observable發射的數據,只要任何一項滿足條件就返回一個發射true的Observable,否則返回一個發射false的Observable。
`exists`默認不在任何特定的調度器上執行。
* Javadoc: [exists(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#exists(rx.functions.Func1))

`isEmpty`默認不在任何特定的調度器上執行。
* Javadoc: [isEmpty()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#isEmpty())
## DefaultIfEmpty
發射來自原始Observable的值,如果原始Observable沒有發射任何值,就發射一個默認值

`DefaultIfEmpty`簡單的精確地發射原始Observable的值,如果原始Observable沒有發射任何數據正常終止(以`onCompleted`d的形式),`DefaultIfEmpty`返回的Observable就發射一個你提供的默認值。
RxJava將這個操作符實現為`defaultIfEmpty`。它默認不在任何特定的調度器上執行。
* Javadoc: [defaultIfEmpty(T)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#defaultIfEmpty(T))
還有一個新的操作符`switchIfEmpty`,不在RxJava 1.0.0版中,它和`defaultIfEmtpy`類似,不同的是,如果原始Observable沒有發射數據,它發射一個備用Observable的發射物。
## SequenceEqual
判定兩個Observables是否發射相同的數據序列。

傳遞兩個Observable給`SequenceEqual`操作符,它會比較兩個Observable的發射物,如果兩個序列是相同的(相同的數據,相同的順序,相同的終止狀態),它就發射true,否則發射false。

它還有一個版本接受第三個參數,可以傳遞一個函數用于比較兩個數據項是否相同。
這個操作符默認不在任何特定的調度器上執行。
* Javadoc: [sequenceEqual(Observable,Observable)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#sequenceEqual(rx.Observable,%20rx.Observable))
* Javadoc: [sequenceEqual(Observable,Observable,Func2)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#sequenceEqual(rx.Observable,%20rx.Observable,%20rx.functions.Func2))
## SkipUntil
丟棄原始Observable發射的數據,直到第二個Observable發射了一項數據

`SkipUntil`訂閱原始的Observable,但是忽略它的發射物,直到第二個Observable發射了一項數據那一刻,它開始發射原始Observable。
RxJava中對應的是`skipUntil`,它默認不在任何特定的調度器上執行。
* Javadoc: [skipUntil(Observable)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#skipUntil(rx.Observable))
## SkipWhile
丟棄Observable發射的數據,直到一個指定的條件不成立

`SkipWhile`訂閱原始的Observable,但是忽略它的發射物,直到你指定的某個條件變為false的那一刻,它開始發射原始Observable。
`skipWhile`默認不在任何特定的調度器上執行。
* Javadoc: [skipWhile(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#skipWhile(rx.functions.Func1))
## TakeUntil
當第二個Observable發射了一項數據或者終止時,丟棄原始Observable發射的任何數據

`TakeUntil`訂閱并開始發射原始Observable,它還監視你提供的第二個Observable。如果第二個Observable發射了一項數據或者發射了一個終止通知,`TakeUntil`返回的Observable會停止發射原始Observable并終止。

RxJava中的實現是`takeUntil`。注意:第二個Observable發射一項數據或一個`onError`通知或一個`onCompleted`通知都會導致`takeUntil`停止發射數據。
`takeUntil`默認不在任何特定的調度器上執行。
* Javadoc: [takeUntil(Observable)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#takeUntil(rx.Observable))

還有一個版本的`takeUntil `,不在RxJava 1.0.0版中,它使用一個謂詞函數而不是第二個Observable來判定是否需要終止發射數據,它的行為類似于`takeWhile`。
* Javadoc: [takeUntil(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#takeUntil(rx.functions.Func1))
## TakeWhile
發射Observable發射的數據,直到一個指定的條件不成立

`TakeWhile`發射原始Observable,直到你指定的某個條件不成立的那一刻,它停止發射原始Observable,并終止自己的Observable。
RxJava中的`takeWhile`操作符返回一個鏡像原始Observable行為的Observable,直到某一項數據你指定的函數返回`false`那一刻,這個新的Observable發射`onCompleted`終止通知。
`takeWhile`默認不在任何特定的調度器上執行。
* Javadoc: [takeWhile(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#takeWhile(rx.functions.Func1))
- ReactiveX
- Observables
- Single
- Subject
- Scheduler
- Operators
- 創建操作
- Create
- Defer
- Empty/Never/Throw
- From
- Interval
- Just
- Range
- Repeat
- Start
- Timer
- 變換操作
- Buffer
- FlatMap
- GroupBy
- Map
- Scan
- Window
- 過濾操作
- Debounce
- Distinct
- ElementAt
- Filter
- First
- IgnoreElements
- Last
- Sample
- Skip
- SkipLast
- Take
- TakeLast
- 結合操作
- And/Then/When
- CombineLatest
- Join
- Merge
- StartWith
- Switch
- Zip
- 錯誤處理
- Catch
- Retry
- 輔助操作
- Delay
- Do
- Materialize/Dematerialize
- ObserveOn
- Serialize
- Subscribe
- SubscribeOn
- TimeInterval
- Timeout
- Timestamp
- Using
- To
- 條件和布爾操作
- All/Contains/Amb
- DefaultIfEmpty
- SequenceEqual
- SkipUntil/SkipWhile
- TakeUntil/TakeWhile
- 算術和聚合操作
- Average/Concat/Reduce
- Max/Min/Count/Sum
- 異步操作
- 連接操作
- Connect
- Publish
- RefCount
- Replay
- 轉換操作
- 阻塞操作
- 字符串操作
- 按字母順序的操作符列表
- RxJava文檔和教程
- RxJava入門指南
- RxJava使用示例
- 實現自定義操作符
- 自定義插件
- Backpressure
- 錯誤處理
- Android模塊
- 參與開發
- 補充閱讀材料