tft每日頭條

 > 生活

 > java8中stream彙總

java8中stream彙總

生活 更新时间:2026-03-03 22:24:57

  

  RxJava進階

  RxJava進階一(創建類操作符)

  RxJava進階二(轉換類操作符)

  RxJava進階三(過濾類操作符)

  RxJava進階四(組合類操作符)

  前言

  前面已經對RxJava原理進行介紹,相信大家對于RXJava已經有了初步的認識,但是在具體使用方面還有些懵懂,從這篇開始詳細介紹下RxJava的具體使用,首先介紹下RXJava的創建操作符~

  操作符總覽

  create、just、from、defer、range、interval、timer、empty、never

  、error、repeat、delay...

  具體使用介紹

  create

  create是RxJava最基本的創建操作符了,使用也是最簡單的~

  create操作符運行結果

  just

  just操作符将某個對象轉化為Observable對象,并且将其發射出去,可以使一個數字、一個字符串、數組、Iterate對象等,是一種非常快捷的創建Observable對象的方法~

  ListString stringList = new ArrayList

  stringList.add("one");

  stringList.add("two");

  stringList.add("three");

  Observable.just(stringList).subscribe(new SubscriberString() { @Override

  public void onCompleted() {

  } @Override

  public void onError(Throwable e) {

  } @Override

  public void onNext(ListString strings) {

  }

  });

  從代碼很清楚的看到,在onNext方法中輸出的是 ListString 對象。

  from

  from操作符用來将某個對象轉化為Observable對象,并且依次将其内容發射出去,from的接收值可以是集合或者數組,這個類似于just,但是just會将這個對象整個發射出去。比如說一個含有3個元素的集合,from會将集合分成3次發射,而使用just會發射一次來将整個的數組發射出去~

  ListString stringList = new ArrayList

  stringList.add("one");

  stringList.add("two");

  stringList.add("three");

  Observable.from(stringList).subscribe(new SubscriberString() {

  @Override public void onCompleted() {

  System.out.println("onCompleted");

  }

  @Override public void onError(Throwable e) {

  System.out.println("Error = " e.getMessage());

  }

  @Override public void onNext(String s) {

  System.out.println("String = " s);

  }

  });

  很明顯,from對集合或數組對象進行了遍曆輸出。

  defer

  Defer操作符隻有當有Subscriber來訂閱的時候才會創建一個新的Observable對象,也就是說每次訂閱都會得到一個剛創建的最新的Observable對象,這可以确保Observable對象裡的數據是最新的,而just則沒有創建新的Observable對象,這樣說可能并不利于大家消化,看下邊與just對比示例~

  Action1String action1 = new Action1String() {

  @Override

  public void call(String s) {

  System.out.println(s);

  }

  }; // defer

  ObservableString defer = Observable.defer(new Func0ObservableString() {

  @Override

  public ObservableString call() { Object o = new Object(); return Observable.just("defer : hashCode = " o.hashCode());

  }

  });

  defer.subscribe(action1);

  defer.subscribe(action1);

  defer.subscribe(action1); // just

  ObservableString just = Observable.just("just : hashCode = " new Object().hashCode());

  just.subscribe(action1);

  just.subscribe(action1);

  just.subscribe(action1);

  輸出結果

  

  defer操作符運行結果

  從輸出結果可以看出來,defer訂閱了三次,但是每次的地址值都發生了變化,而just則三次的地址值是同樣的,從而驗證了上面的結論。

  range

  Range操作符根據輸入的初始值【initial】和數量【number】發射number次、大于等于initial的值~

  Observable.range(100, 5).subscribe(new Action1Integer() {

  @Override public void call(Integer integer) {

  System.out.println(integer);

  }

  });

  

  range操作符運行結果

  interval

  Interval所創建的Observable對象會從0開始,每隔固定的時間發射一個數字,需要注意的是這個對象是運行在computation Scheduler,所以要更新UI需要在主線程中進行訂閱~

  Observable

  .interval(1, TimeUnit.SECONDS)

  .observeOn(AndroidSchedulers.mainThread())

  .subscribe(new Action1() {

  @Override public void call(Long aLong) {

  System.out.println(aLong);

  }

  });

  輸出結果

  

  interval操作符運行結果

  timer

  Timer會在指定時間後發射一個數字0,注意其也是運行在computation Scheduler~

  Observable

  .timer(2, TimeUnit.SECONDS)

  .observeOn(AndroidSchedulers.mainThread())

  .subscribe(aLong - { // 替代timertask與handler延遲,可以在這跳轉主界面

  });

  下面有幾個不常用的創建操作符,還是簡單介紹下吧~

  empty

  創建一個Observable不發射任何數據、而是立即調用onCompleted方法終止~

  ObservableString empty = Observable.empty();

  empty.subscribe(new SubscriberString() { @Override

  public void onCompleted() {

  System.out.println("onCompleted");

  } @Override

  public void onError(Throwable e) {

  } @Override

  public void onNext(String s) {

  System.out.println("onNext");

  }

  });

  輸出結果

  

  empty操作符運行結果

  never

  創建一個Observable不發射任何數據、也不給訂閱ta的Observer發出任何通知~

  ObservableString never = Observable.never();

  never.subscribe(new SubscriberString() {

  @Override public void onCompleted() {

  System.out.println("onCompleted");

  }

  @Override public void onError(Throwable e) {

  System.out.println(e.getMessage());

  }

  @Override public void onNext(String s) {

  System.out.println("onNext");

  }

  });

  輸出結果

  

  never操作符運行結果

  error

  返回一個Observable,當有Observer訂閱ta時直接調用Observer的onError方法終止

  ObservableString error = Observable.error(new Throwable("Observable.error"));

  error.subscribe(new SubscriberString() {

  @Override public void onCompleted() {

  System.out.println("onCompleted");

  }

  @Override public void onError(Throwable e) {

  System.out.println(e.getMessage());

  }

  @Override public void onNext(String s) {

  System.out.println("onNext");

  }

  });

  輸出結果

  

  error操作符運行結果

  接下來有兩個不是創建類操作符,但是行為能力與創建類操作符非常相似,故在此介紹下~

  repeat

  Repeat會将一個Observable對象重複發射,接收值是發射的次數,依然訂閱在 computation Scheduler~

  Observable.just(1).repeat(10).subscribe(new Action1Integer() {

  @Override public void call(Integer integer) {

  System.out.println(integer);

  }

  });

  輸出結果

  

  repeat操作符運行結果

  delay

  功能與timer操作符一樣,但是delay用于在事件中,可以延遲發送事件中的某一次發送~

  Observable.just(1).delay(2,TimeUnit.SECONDS).subscribe(new Action1Integer() {

  @Override public void call(Integer integer) {

  System.out.println(integer);

  }

  });

  結語

  創建類操作符,就簡單介紹到這裡,希望能夠對同學有所幫助,謝謝~

  文/walid(簡書作者)

  原文鍊接:http://www.jianshu.com/p/0cb521ba1e10

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2026 - www.tftnews.com All Rights Reserved