只發(fā)射前面的N項(xiàng)數(shù)據(jù)
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/take.c.png" alt="take" />
使用Take
操作符讓你可以修改Observable的行為,只返回前面的N項(xiàng)數(shù)據(jù),然后發(fā)射完成通知,忽略剩余的數(shù)據(jù)。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/take.png" alt="take" />
RxJava將這個(gè)操作符實(shí)現(xiàn)為take
函數(shù)。
如果你對(duì)一個(gè)Observable使用take(n)
(或它的同義詞limit(n)
)操作符,而那個(gè)Observable發(fā)射的數(shù)據(jù)少于N項(xiàng),那么take
操作生成的Observable不會(huì)拋異?;虬l(fā)射onError
通知,在完成前它只會(huì)發(fā)射相同的少量數(shù)據(jù)。
示例代碼
Observable.just(1, 2, 3, 4, 5, 6, 7, 8)
.take(4)
.subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
輸出
Next: 1
Next: 2
Next: 3
Next: 4
Sequence complete.
take(int)
默認(rèn)不任何特定的調(diào)度器上執(zhí)行。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/take.t.png" alt="take" />
take
的這個(gè)變體接受一個(gè)時(shí)長(zhǎng)而不是數(shù)量參數(shù)。它會(huì)丟發(fā)射Observable開(kāi)始的那段時(shí)間發(fā)射的數(shù)據(jù),時(shí)長(zhǎng)和時(shí)間單位通過(guò)參數(shù)指定。
take
的這個(gè)變體默認(rèn)在computation
調(diào)度器上執(zhí)行,但是你可以使用第三個(gè)參數(shù)指定其它的調(diào)度器。