2021-02-05

RxJava 基本

1,创建:

1.1,已有数据创建,just() ,from() 

// from 将数组或Iterable数据取出逐个发射
Observable<String> o = Observable.from("a", "b", "c");

def list = [5, 6, 7, 8]
Observable<Integer> o = Observable.from(list);

// just 将单个数据转换为发射的那个数据的Observable
// 如果是数据或者Iterable数据,将会作为单个数据
Observable<String> o = Observable.just("one object");

1.2,使用Create()创建Observable

同步的Observable示例
/**
 * 这个例子展示了一个自定义的Observable,当有订阅时他会阻塞当前线程。
 */
def customObservableBlocking() {
    return Observable.create { aSubscriber ->
        50.times { i ->
            if (!aSubscriber.unsubscribed) {
                aSubscriber.onNext("value_${i}")
            }
        }
        // after sending all values we complete the sequence
        if (!aSubscriber.unsubscribed) {
            aSubscriber.onCompleted()
        }
    }
}

// To see output:
customObservableBlocking().subscribe { println(it) }
异步的Observable示例
/**
 * This example shows a custom Observable that does not block
 * when subscribed to as it spawns a separate thread.
 */
def customObservableNonBlocking() {
    return Observable.create({ subscriber ->
        Thread.start {
            for (i in 0..<75) {
                if (subscriber.unsubscribed) {
                    return
                }
                subscriber.onNext("value_${i}")
            }
            // after sending all values we complete the sequence
            if (!subscriber.unsubscribed) {
                subscriber.onCompleted()
            }
        }
    } as Observable.OnSubscribe)
}

// To see output:
customObservableNonBlocking().subscribe { println(it) }

3,变换操作

     skip(10) 跳过最开始的10个,take(5) 获取接下来的5个,在订阅之前使用map() 转换他们,然后打印结果。

def simpleComposition() {
    customObservableNonBlocking().skip(10).take(5)
        .map({ stringValue -> return stringValue + "_xform"})
        .subscribe({ println "onNext => " + it})
}

4,其他操作符

  4.1创建操作

    first() 获取第一个元素 = take(1).single()

    empty() 创建一个不发射任何数据但是正常终止的observable

    never() 创建一个不发射数据也不终止的Obserable,

    throw(Java.lang.Throwable) 创建一个不发射数据以一个错误终止的Observable

    interval(long,TimeUnit) 创建一个按固定间隔发射整数序列的Observable

    range(int,int)创建一个发色好特定整数的Observable

    repeat() 创建一个发射特定数据重复次数的Observable

    start(fun(){}) 返回一个Observable,它发射一个类似于函数声明的值

    timer(long,TimeUnit) 创建一个Observable,它在一个给定的延迟后发射一个特殊的值

  4.2 变换操作

    buffer() 定期收集Observable的数据放进一个数据包裹,然后发射这些数据包裹,而不是一次发射一个值。

    flatMap() 将一个发射数据的Observable变换为多个Observables,然后将它们发射的数据合并后放进一个单独的Observable操作符,使用一个指定的函数对原始Observable发射的每一项数据执行变换操作,这个函数返回一个本身也发射数据的Observable,然后FlatMap合并这些Observables发射的数据,最后将合并后的结果当做它自己的数据序列发射。注意:FlatMap对这些Observables发射的数据做的是合并(merge)操作,因此它们可能是交错的。在许多语言特定的实现中,还有一个操作符不会让变换后的Observables发射的数据交错,它按照严格的顺序发射这些数据,这个操作符通常被叫作ConcatMap或者类似的名字。

    map() 对Observable发射的每一项数据应用一个函数,执行变换操作,操作符对原始Observable发射的每一项数据应用一个你选择的函数,然后返回一个发射这些结果的Observable。

    groupBy() 将一个Observable分拆为一些Observables集合,它们中的每一个发射原始Observable的一个子序列

    scan() 连续地对数据序列的每一项应用一个函数,然后连续发射结果

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值