RxJava-操作符

操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。
RxJava提供了很多很有用的操作符。
我们的观察者的作用是响应,那么数据的变换就要靠操作符来对观察者的Observable对象进行修改来实现了

一.Map
特性:
1.它不必返回Observable对象返回的类型,你可以使用map操作符返回一个发出新的数据类型的observable对象。
2.可以对一个Observable多次使用map

//刚创建的Observable是String类型的
Observable.just("Hellp Map Operator")
//通过操作符,返回了Integer类型的Observable对象
.map(new Func1<String, Integer>() {
    @Override
    public Integer call(String s) {
        return 2015;//通过第一个map转成Integer
    }
//通过操作符,返回了String类型的Observable对象
}).map(new Func1<Integer, String>() {
    @Override
    public String call(Integer integer) {
        return String.valueOf(integer);//再通过第二个map转成String
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

二.FlatMap
Observable.flatMap()接收一个Observable的输出作为输入,同时输出另外一个Observable。

    List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift");
    Observable.just(s).flatMap(new Func1<List<String>, Observable<String>>() {
    @Override
    public Observable<String> call(List<String> strings) {
        //结合from处理
        return Observable.from(strings);
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println("_flatMap:"+s);
    }
});

日志

_flatMap:Java
_flatMap:Android
_flatMap:Ruby
_flatMap:Ios
_flatMap:Swift

Map和FlatMap最大的区别应该是:
FlatMap经过 Observable 的转换,相当于重新开了一个异步的流;
item 被分散了,个数发生了变化。

三.From

from()接收一个集合作为输入,然后每次输出一个元素给subscriber.

List s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift");
Observable.from(s).subscribe(new Action1() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

日志:

Java
Android
Ruby
Ios
Swift

更多的操作符:
1.filter 过滤,把不符合条件的过滤掉,留下符合条件的
2.take 指定最多输出的数量
3.doOnNext 允许我们在每次输出一个元素之前做一些额外的事情(其实就是在onNext里调用的)

query().flatMap(new Func1<List<String>, Observable<String>>() {
    @Override
    public Observable<String> call(List<String> strings) {
        return Observable.from(strings);
    }
}).flatMap(new Func1<String, Observable<String>>() {
    @Override
    public Observable<String> call(String s) {
        return addPre(s);
    }
}).filter(new Func1<String, Boolean>() {
    @Override
    public Boolean call(String s) {
        //包含a的留下
        return s.contains("a");
    }
}).take(3)//最多只取3个
  .doOnNext(new Action1<String>() {
    @Override
    public void call(String s) {
        //onNext之前 输出一下
        System.out.println("doOnNext:"+s);
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

你可能感兴趣的:(Android基础)