RxJava

Rxjava 1.0

Github官方解释:一个在Java VM上使用可观察的序列来组成异步的、基于事件的程序库;总结三个字就是异步库。

简介

RxJava(异步)响应式编程,本质是观察者模式,以观察者observe和订阅者subscribe为基础的异步响应式开发,Rx是一种编程模式,目标提供一致的编程接口,帮助开发者更方便处理异步数据流。

优点

  • 编程思路简洁明了
  • 方便创建事件流和数据流
  • 可以订阅任何可观察的数据流并执行操作
  • 使用操作符组合变换数据流

使用

Observable 被观察者

1
2
3
4
5
6
Observable observable = Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("hello rxjava");
}
});

Subscriber 观察者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Subscriber subscriber = new Subscriber<String>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(String str) {
tv.setText(str);
}
};

绑定

  • 被观察者普通绑定观察者

    1
    this.observable.subscribe(subscriber);
  • 被观察者绑定Action1接收事件

    1
    2
    3
    4
    5
    6
    this.observable.subscribe(new Action1<String>() {
    @Override
    public void call(String str) {
    tv.setText(str);
    }
    });
  • 被观察者Observable使用Just发出事件,被观察者绑定Action1接收事件

    1
    2
    3
    4
    5
    6
    Observable.just("hello rxjava").subscribe(new Action1<String>() {
    @Override
    public void call(String str) {
    tv.setText(str);
    }
    });
  • Lambda表达式

    1
    Observable.just("hello rxjava").subscribe( s -> tv.setText(s));

操作符

操作符目的是为了解决对Observable对象的变换问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件

Map 操作符

map()操作符是用于变换Observable对象的,map操作符返回一个Observable对象,在一个Observable对象中多次使用map操作符,最终将数据传给Subscriber。

1
2
3
4
5
6
7
8
9
10
11
12
13
Observable.just("hello rxjava")
.map(new Func1<String, String>() {
@Override
public String call(String s) {
return s + "again";
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String str) {
tv.setText(str);
}
});

From 操作符

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

1
2
3
4
5
6
7
List<String> list = Arrays.asList("a","b","c");
Observable.from(list).subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});

FlatMap 操作符

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

1
2
3
4
5
6
7
8
9
10
11
12
13
List<String> list = Arrays.asList("a","b","c");
Observable<List<String>> observable = Observable.just(list);
observable.flatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> strings) {
return Observable.from(strings);
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println("FlatMap_" + s);
}
});

Filter 操作符

过滤,把不符合条件的过滤掉,只留下符合条件的操作符

Take 操作符

指定最多输出数量

doOnNext 操作符

每次输出一个元素前做一些其他的事情

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器