最近一直在学习反应式编程,分享些容易理解的干货,有误请积极指正,谢谢大家
Rxjava种反应式编程提供了
Observable : 被观察者(发布者)
Subscriber:观察者(订阅者)
//原始方法创建简单的Observable
Observable<String> observable = Observable.create( new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("hello word"); // 结束发布操作符 subscriber.onCompleted(); } } );
//订阅者
Subscriber<String> subscriber = new Subscriber<String>() { // @Override public void onCompleted() { } @Override public void onError(Throwable throwable) { } @Override public void onNext(String s) { System.out.println(s); } };
//订阅
observable.subscribe(subscriber);
//简化
Observable.just("Hello, world!") .subscribe( new Action1<String>() { @Override public void call(String s) { System.out.println(s); } });
observable1.subscribe(action1);
lambda表达式创建:
Observable.just("hello world") .subscribe(s->{ System.out.println(s); });
map操作符:有时候需要对Observable做一些业务处理在发布给订阅者,map操作符使用后返回的是一个全新的和原来的Observable没有任何关系的Observable,且类型也可以不一样。
例如(直观起见拆分成多步):
Observable<String> stringObservable = Observable.just("hello world");
Observable<String> stringObservableReturn = stringObservable.map(value->{ return value+"a"; });
//sub为订阅者 stringObservableReturn.subscribe(sub->{ System.out.println("发布"); });
经过一系列操作后,stringObservable还是原来的stringObservable,新生成的stringObservableReturn也可以是包含其他类型的对象,例如:
Observable<String> stringObservable = Observable.just("hello world");
Observable<Integer> integerObservableReturn = stringObservable.map(value->{
return 1;
});
//sub为订阅者
stringObservableReturn.subscribe(sub->{
System.out.println("发布");
});
RxJAVA和springboot提供的响应式编程有异曲同工之处