Rxjava2(二)变换操作符

变换操作符

转载:https://www.jianshu.com/p/904c14d253ba

map

// 将被观察者发送的事件转换为任意的类型事件
private void map() {
    Observable.just(1,2,3)
            .map(new Function<Integer, String>() {
                @Override
                public String apply(Integer integer) throws Exception {
                    return "我是转换后的数据"+integer;
                }
            }).subscribe(new Consumer<String>() {
        @Override
        public void accept(String s) throws Exception {
                LogUtils.syso("======accept====="+s);
        }
    });
}

示意图
  • 应用场景
    数据类型转换

flatmap

作用:将被观察者发送的事件序列进行 拆分 & 单独转换,再合并成一个新的事件序列,最后再进行发送

private void flatMap() {
    final Integer[] items={1,2,3,4};
    Observable.just(items)
            .flatMap(new Function<Integer[], ObservableSource<? extends String >>() {
                @Override
                public ObservableSource<?  extends String> apply(Integer[] integers) throws Exception {
                    List<String> mList=new ArrayList<>();
                    for (int j = 0; j < integers.length; j++) {
                        mList.add("我是事件"+integers[j]);
                    }
                    return Observable.fromIterable(mList);
                }
            }).subscribe(new Consumer<String>() {
        @Override
        public void accept(String s) throws Exception {
            LogUtils.syso("======accept===="+s);
        }
    });
}

应用场景

无序的将被观察者发送的整个事件序列进行变换

concatMap

/**
 * 作用:类似FlatMap()操作符

FlatMap()的 区别在于:拆分 & 重新合并生成的事件序列 的顺序 = 被观察者旧序列生产的顺序
 *
 * */
private void concatMap() {
    final Integer[] items={1,2,3,4};
    Observable.just(items)
            .concatMap(new Function<Integer[], ObservableSource<? extends String >>() {
                @Override
                public ObservableSource<?  extends String> apply(Integer[] integers) throws Exception {
                    List<String> mList=new ArrayList<>();
                    for (int j = 0; j < integers.length; j++) {
                        mList.add("我是事件"+integers[j]);
                    }
                    return Observable.fromIterable(mList);
                }
            }).subscribe(new Consumer<String>() {
        @Override
        public void accept(String s) throws Exception {
            LogUtils.syso("======accept===="+s);
        }
    });
}

buffer

作用
定期从 被观察者(Obervable)需要发送的事件中 获取一定数量的事件 & 放到缓存区中,最终发送

private void buffer() {
    final Integer[] items={1,2,3,4};
    Observable.fromArray(items)
       .buffer(3,1)
          .concatMap(new Function<List<Integer>, ObservableSource<? extends Integer>>() {
              @Override
              public ObservableSource<? extends Integer> apply(List<Integer> integers) throws Exception {
                  return Observable.fromIterable(integers);
              }
          }).subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Exception {
            LogUtils.syso("=======accept==="+integer);
        }
    });
}

参考:


小结:


猜你喜欢

转载自blog.csdn.net/oneblue123/article/details/80540621