<
协程 flow 常用操作符 及与 rxjava2 对比
>
上一篇

Viewbinding 对比 findviewbyid databinding anko
下一篇

Windows attrib 显示或更改文件属性

Flow 常用操作符

1. 创建操作符

2. 转换操作符

3. 过滤操作符

4. 组合操作符

5. 终止操作符

6. 错误处理操作符

7. 流控制操作符

8. 调度器

FlowRxJava2 操作符

类别 Flow RxJava2
创建操作符 flow {} Observable.create()
  asFlow() Observable.just()
    Observable.fromIterable()
转换操作符 map() map()
  flatMapConcat() flatMap()
  flatMapMerge() flatMap() (并发)
  transform() switchMap()
过滤操作符 filter() filter()
  take(n) take(n)
  drop(n) skip(n)
  distinctUntilChanged() distinctUntilChanged()
组合操作符 combine() zip()
  zip() zip()
  merge() merge()
错误处理操作符 catch() onErrorReturn()
  onCompletion() onError()
    retry()
终止操作符 collect() subscribe()
  first() first()
流控制操作符 retry() retry()
  onCompletion() doOnTerminate()
调度器 flowOn() subscribeOn()
    observeOn()

Flow 操作符跟 RxJava2 差不多,但是需要在协程内使用

        // Flow
        lifecycleScope.launch {
            flow<Int> {
                for (i in 0 until 10) {
                    emit(i) // 在每次遍历时发出事件 
                }
            }.flowOn(Dispatchers.IO)
                .onStart { // 最先开始

                }.onEach { // 每次接收

                }.catch { // 异常接收

                }.onCompletion { // 整个流完成

                }.collect {  // 数据接收

                }
        }
		
		// RxJava2
		Observable.range(0, 10) // 创建一个发射 0 到 9 的 Observable
        .subscribeOn(Schedulers.io()) // 在 IO 线程上执行
        .doOnSubscribe(disposable -> {
            // 最先开始
        })
        .doOnNext(value -> {
            // 每次接收
        })
        .doOnError(throwable -> {
            // 异常接收
        })
        .doOnComplete(() -> {
            // 整个流完成
        })
        .observeOn(AndroidSchedulers.mainThread()) // 在主线程上处理结果
        .subscribe(
            value -> {
                // 数据接收
            },
            throwable -> {
                // 错误处理
            },
            () -> {
                // 完成处理
            }
        );
Top
Foot