編輯:關於Android編程
一、debounce
僅在過了一段指定的時間還沒發射數據時才發射一個數據,Debounce操作符會過濾掉發射速率過快的數據項。
注:這個操作符會會接著最後一項數據發射原始Observable的
onCompleted通知,即使這個通知發生在你指定的時間窗口內(從最後一項數據的發射算起)。也就是說,
onCompleted通知不會觸發限流。
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.debounce(2,TimeUnit.SECONDS);
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
二、filter
只發射符合條件的數據,
Filter操作符使用你指定的一個謂詞函數測試數據項,只有通過測試的數據才會被發射。
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.filter(new Func1() {
@Override
public Boolean call(Integer integer) {
return integer < 7;
}
});
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
三、ofType
ofType只返回指定類型的數據
Object [] items = {"dd",1,"ff",33,"fr",6,8,"zga",5};
Observable myObservable = Observable.from(items)
.ofType(Integer.class);
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
四、takeLast
發射Observable發射的最後N項數據,
TakeLast操作符修改原始Observable,你可以只發射Observable'發射的後N項數據,忽略前面的數據。
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.takeLast(5);
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
五、last
只發射最後一項(或者滿足某個條件的最後一項數據)
注:
Last沒有實現為一個返回Observable的過濾操作符,而是實現為一個在當時就發射原始Observable指定數據項的阻塞函數。在這些實現中,如果你想要的是一個過濾操作符,最好使用
TakeLast(1)。
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.last();
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
六、lastOrDefault
lastOrDefault與
last類似,不同的是,如果原始Observable沒有發射任何值,它發射你指定的默認值。
Integer[]items = {};
Observable myObservable = Observable.from(items)
.lastOrDefault(3);
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
七、takeLastBuffer
takeLastBuffer和
takeLast類似,唯一的不同是它把所有的數據項收集到一個
List再發射,而不是依次發射一個。
<code><code><code><code><code><code><code><code><code><code><code><code> Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .takeLastBuffer(4); Subscriber<list<integer>> mySubscriber =new Subscriber<list<integer>>() { @Override public void onNext(List<integer> list) { System.out.println("onNext方法中集合的長度是................."+list.size()); for(int i=0;i<list.size();i++){ override="" public="" void="" throwable="" pre="">
運行結果:
八、skip
跳過之前的n項,從n+1項開始發射數據
Integer[]items = {1,2,3,4,5,6,7,8}; Observable myObservable = Observable.from(items) .skip(4); Subscriber運行結果:mySubscriber =new Subscriber () { @Override public void onNext(Integer integer) { System.out.println("onNext................."+integer); } @Override public void onCompleted() { System.out.println("onCompleted................."); } @Override public void onError(Throwable e) { System.out.println("onError...................."); } }; myObservable.subscribe(mySubscriber);
九、skipLast
SkipLast操作符,你可以忽略原始Observable發射的後N項數據,只保留之前的數據。注意:這個機制是這樣實現的:延遲原始Observable發射的任何數據項,直到它發射了N項數據。
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.skipLast(4);
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
十、take
Take操作符讓你可以修改Observable的行為,只返回前面的N項數據,然後發射完成通知,忽略剩余的數據。
Integer[]items = {1,2,3,4,5,6,7,8};
Observable myObservable = Observable.from(items)
.take(4);
Subscriber mySubscriber =new Subscriber() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext................."+integer);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
運行結果:
本章使用Intent,回傳需要的結果; 流程: 主頁讀取用戶名並顯示出來。 1 啟動主頁圖: 2 啟動第二個activity 3 輸入用戶名: 4 回傳到主頁
一、問題描述 為提高圖片加載的效率,需要對圖片的采用緩存和異步加載策略,編碼相對比較復雜,實際上有一些優秀的框架提供了解決方案,比如近期在git上比較活躍的xut
小米4絕對是小米的一個神機:至少是安卓手機中稍有的可以刷雙系統的,為發燒而生。微軟教程不是人看的!官方就放了句話,然後死都不給教程!坑死人不償命!!!!首先
不少玩家會想到將圖片拷貝到電腦中,然後用PS等工具去標注編輯加工,然在再發送到朋友圈或社交平台。那麼,轉來轉去,是不是也不太方便呢?其實Android手機也