日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

RxJava学习-使用篇

發布時間:2024/2/28 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RxJava学习-使用篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

  • Observer 觀察者決定事件觸發時有什么行為。
  • Observable 決定什么時候觸發事件,以及觸發什么事件
  • Action 取代被觀察者,決定觸發什么事件,不完整回調
  • create just from 都是用來創建Observable的,create 用來創建無參Observable,just用來創建一個Observable,而from用來創建一個集合的Observable,參數是一個List。

    一. 創建操作符

  • interval 隔一段時間發射整數序列的Observable,可以實現定時器:
  • Observable.interval(3, TimeUnit.SECONDS).subscribe {Log.d("tag", "interval: $it")}// 1 2 3 4 5 6 7 8 ...
  • 創建發射指定范圍的Observable,代替for
  • Observable.range(0, 6).subscribe {Log.d("tag", "interval: $it")}// 1 2 3 4 5
  • 創建一個N次重復發射特定數據的Observable
  • Observable.range(0, 2).repeat(2).subscribe {Log.d("tag", "interval: $it")}// 0 1 0 1

    二. 變換操作符

  • map : 變化操作符,可以把一個Observable變成一個新的Observable對象
  • Observable.just("haha").map {it + "word"}.subscribe{Log.d("tag",it)}
  • flatMap concatMap : 對將集合中的每個元素進行操作。caoncatMap是保證順序的。
  • val fruitList = listOf<String>("apple", "banana", "orange")Observable.from(fruitList).concatMap { Observable.just(it + "word") }.subscribe {Log.d("tag :", it)}val fruitList2 = listOf<String>("apple", "banana", "orange")Observable.from(fruitList2).flatMap { Observable.just(it + "word") }.subscribe {Log.d("tag :", it)} //appleword bananaword orangeword
  • flatMapIterable 將一個序列轉變成一個Iterable接口的集合
  • Observable.just(1,"asd",true).flatMapIterable {val mList = mutableListOf<Any>()mList.add(it)mList}.subscribe{Log.d("tag" , ""+it);} // D/tag: [1] // D/tag: [asd] // D/tag: [true]

    在這里實際上創建了三個MutableList,沒創建一個調用一次subsribe方法。

  • buffer
  • 這里拿前面的例子略加修改

    Observable.just(1,"asd",true).flatMapIterable {val mList = mutableListOf<Any>()mList.add(it)mList}.buffer(2).subscribe{Log.d("tag" , ""+it);}// D/tag: [1, asd] // D/tag: [true]

    這里其實還是創建了三個mutableListOf對象,只是存了兩個對象之后在發射消息。

  • groupBy 按照某個規則分組
  • data class Student(val name : String, val mClass : Int)val s1 = Student("Tom",1)val s2 = Student("Hey",2)val s3 = Student("Jim",1)val s4 = Student("Amy",1)val s5 = Student("Cat",2)val s6 = Student("Pat",3)val groupObObservable.just(s1,s2,s3,s4,s5,s6).groupB{t.mClass}Observable.concat(groupOb).subscribe{Log.d("tag",it.name + " " + it.mClass)// D/tag: Tom 1// D/tag: Jim 1// D/tag: Amy 1// D/tag: Hey 2// D/tag: Cat 2// D/tag: Pat 3

    三. 過濾操作符

  • filter:過濾指定條件的元素
  • 用上面的例子

    data class Student(val name : String, val mClass : Int)val s1 = Student("Tom",1)val s2 = Student("Hey",2)val s3 = Student("Jim",1)val s4 = Student("Amy",1)val s5 = Student("Cat",2)val s6 = Student("Pat",3)Observable.just(s1,s2,s3,s4,s5,s6).filter {it.mClass > 1}.subscribe{Log.d("tag",it.name + " " + it.mClass)}// D/tag: Tom 2// D/tag: Jim 1 // D/tag: Pat 3
  • elementAt
  • data class Student(val name : String, val mClass : Int)val s1 = Student("Tom",2)val s2 = Student("Hey",2)val s3 = Student("Jim",1)val s4 = Student("Amy",1)val s5 = Student("Cat",2)val s6 = Student("Pat",3)val list = mutableListOf<Student>(s1,s2,s3,s4,s5,s6)Observable.from(list).elementAt(2).subscribe{Log.d("tag",it.name + " " + it.mClass)}// D/tag: Jim 1
  • distinct 過濾元素,不可變對象或基本類型可以不寫參數
  • data class Student(val name : String, val mClass : Int)val s1 = Student("Tom",2)val s2 = Student("Hey",2)val s3 = Student("Jim",1)val s4 = Student("Amy",1)val s5 = Student("Cat",2)val s6 = Student("Pat",3)val list = mutableListOf<Student>(s1,s2,s3,s4,s5,s6)Observable.from(list).distinct{it.mClass}.subscribe{Log.d("tag",it.name + " " + it.mClass)}
  • skip take 跳過/取前n項
    skipLast takeLast 從后面
  • data class Student(val name : String, val mClass : Int)val s1 = Student("Tom",2)val s2 = Student("Hey",2)val s3 = Student("Jim",1)val s4 = Student("Amy",1)val s5 = Student("Cat",2)val s6 = Student("Pat",3)val list = mutableListOf<Student>(s1,s2,s3,s4,s5,s6)Observable.from(list).skip(2).subscribe{Log.d("tag",it.name + " " + it.mClass)}```// D/tag: Jim 1// D/tag: Amy 1// D/tag: Cat 2// D/tag: Pat 3
    不常用
  • ignoreElement 忽略元素
  • throleFirst:定期發送這個時間段里源Observable發射的第一個數據
  • throttleWithTimeOut: 每次源Observable發射出來一個數據后就要計時。如果在設定好的時間結束前有源Observable發送新的數據出來,那么這個數據就會丟棄。同時throttleWithTimeOut重新開始計時。
  • 四. 組合操作符

  • startWith 在元素前面添加元素
  • Observable.just(3,4,5).startWith(1,2).subscribe{Log.d("tag",it.toString())}// 1,2,3,4,5
  • merge concat 合并
  • val obj1 = Observable.just(1,2,3);val obj2 = Observable.just(4,5,6);Observable.merge(obj1,obj2).subscribe{Log.d("tag",it.toString());}// 1,2,3,4,5,6
  • zip 合并Observable并指定合并方式
  • val obj1 = Observable.just(1, 2, 3).subscribeOn(Schedulers.io());val obj2 = Observable.just(4, 5, 6);Observable.zip(obj1, obj2) { t1, t2 ->t1 + t2}.subscribe{Log.d("tag",it.toString())}
  • combineLastest 第一個Observable發射完再發射
  • val obj1 = Observable.just(1, 2, 3);val obj2 = Observable.just(4, 5, 6);Observable.combineLatest(obj1,obj2) { t1, t2 ->" $t1 + $t2 "}.subscribe{Log.d("tag",it.toString())}

    五. 輔助操作符

  • delay 讓原始Observable在發射每項數據之前都暫停一段時間。
  • Observable.create(Observable.OnSubscribe<Long> {it.onNext(System.currentTimeMillis())}).delay(2,TimeUnit.SECONDS).subscribe{Log.d("tag" , "" + (System.currentTimeMillis() - it) )}// 2003
  • Do 為原始Observable的聲明周期事件注冊一個回調,
  • 方法含義
    doOnEachObservable每發射一次數據調用一次
    doOnNext執行OnNext的時候調用
    doOnSubscribe觀察者訂閱Observable時候調用
    doOnUnsubscribe取消訂閱的時候使用
    doOnCompletedObservable正常終止調用onCompleted時調用
    doOnError當Observable異常終止的時候調用onError時調用。
    doOnTerminate當OBservable終止之前會被調用
    finallyDo當Observable終止之后會被調用
  • subscribeOn oberveOn
  • subscribeOn表示Observable自身在那個線程上運行,如果執行的是耗時的操作,那么可以讓他在新開的一個子線程上運行。observerOn表示Observer所運行的線程。一般在主線程中運行,這樣可以修改ui。

  • timeout
  • 如果Observable在指定的一段時間沒有發射數據,那么timeout會以一個OnError終止通知這個Observable,或者執行一個備用的Observable。

    Observable.create(Observable.OnSubscribe<Int> {for(i in 0 until 5){try {Thread.sleep(i * 100.toLong())}catch (e : Exception){}it.onNext(i);}}).timeout(200, TimeUnit.MILLISECONDS,Observable.just(11,12)).subscribe{Log.d("tag", it.toString())}// 0 1 2 11 12

    六. 條件操作符和布爾操作符

  • all 是否全部滿足
  • contains 是否包括某一個數據
  • isEmpty 判斷是否發射過數據
  • amb 對于給定的Observable,它只會發射首先發射的數據或通知的那個Observable的所有數據。
  • defaultIfEmpty 如果原始Observable沒有發射數據,就發射一個默認的數據。
  • 七. 轉換操作符

  • toList toList操作符發射多項數據且為每一項數據調用onNext方法的Observable發射的多項數據組合成一個List,然后通過onNext傳遞整個列表
  • Observable.just(1, 2, 3).toList().subscribe {Log.d("tag", it.toString());}// [1,2,3]
  • toSortList 在toList操作的基礎上進行排序操作
  • toMap
  • data class Student(val name : String, val mClass : Int)val s1 = Student("Tom",2)val s2 = Student("Hey",2)val s3 = Student("Jim",1)val s4 = Student("Amy",1)val s5 = Student("Cat",2)val s6 = Student("Pat",3)val list = mutableListOf<Student>(s1,s2,s3,s4,s5,s6)Observable.from(list).toMap {it.mClass}.subscribe{val class1Student = it[1]Log.d("tag" , class1Student.toString())}

    總結

    以上是生活随笔為你收集整理的RxJava学习-使用篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。