RxJavaのAndroidプロジェクトでの使用(二)
5711 ワード
RxJavaオペレータ map()オペレータは、Observableオブジェクトを変換するために使用され、mapオペレータはObservableオブジェクトを返します.これにより、1つのObservableオブジェクト上でmapオペレータを複数回使用し、最終的に最も簡潔なデータをSubscriberオブジェクト に渡すチェーンコールを実現できます. from()は入力として1つのセットを受信し、subscriber に1つの要素を出力するたびに flatmap() Observable.flatMap()は、一方のObservableの出力を入力として受信とともに他方のObservable を出力する. filterフィルタリングし、条件に合致しないフィルタを除去し、条件に合致する を残す. take最大出力数 を指定 doOnNextでは、要素を出力するたびに追加のことをすることができます. 例1 create()作成 subscribe()購読 just() from()はjustと同様にオペレータを作成しますが、fromオペレータは少し強くなります.fromオペレータは、入力された配列やIterableを特定のオブジェクトに分割して順次送信する役割を果たすからです.
例2
map()プロパティ: Observableオブジェクトが返すタイプを返す必要はありません.mapオペレータを使用して、新しいデータ型を発行するobservableオブジェクトを返すことができます. は、1つのObservableに対してmap を複数回使用することができる.
例3
Mapは一対一の変換ですが、一対多の変換はありますか?もちろん、現在説明されているFlatMap FlatMapオペレータは、元のObservableから送信された各データに対して指定された関数を使用して変換操作を実行します.この関数は、自身もデータを送信したObservableを返し、FlatMapはこれらのObservablesから送信されたデータをマージし、最後にマージされた結果を独自のデータシーケンスとして送信します.
次にflatmapの処理方法を見てみましょう.
// TODO: 2016/12/16 observerable
Observable observable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber super String> subscriber) {
subscriber.onNext("111");
subscriber.onNext("222");
subscriber.onNext("333");
subscriber.onNext("444");
subscriber.onCompleted();
}});
//// TODO: 2016/12/16 just() from()
Observable.just("111", "222", "333");
Observable.from(new String[]{"111", "222", "333"});
// TODO: 2016/12/16
Observable.from(new String[]{"1", "2", "3"}).subscribe(new Action1() { @Override
public void call(String s) {
DebugLog.i(s + "=====");
}});
class Course {
String name = "";
public Course(String name) { this.name = name; }
public String getCourse() { return " china " + name; }
}
class Student {
String name = "";
Course course[];
public Student(String name) {
this.name = name;
course = new Course[]{new Course(getName()), new Course(getName()), new Course(getName()), new Course(getName())};
}
public String getName() { return name; }
}
Student[] students = new Student[]{new Student("zhangsan"), new Student("lisi"), new Student("wangwu"), new Student("maliu")};
// TODO: 2016/12/16 flatmap
Observer observer = new Observer() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Course course) {
DebugLog.i(course.name + "====");
}
};
Observable.from(students).flatMap(new Func1>() {
@Override
public Observable call(Student student) {
return Observable.from(student.course); }})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
// TODO: 2016/12/16 lift integer string
observable.lift(new Observable.Operator() {
@Override
public Subscriber super Integer> call(final Subscriber super String> subscriber) {
return new Subscriber() {
@Override
public void onCompleted() {
subscriber.onCompleted();
}
@Override
public void onError(Throwable e) {
subscriber.onError(e);
}
@Override
public void onNext(Integer integer) {
subscriber.onNext(integer + "=============");
}
};
}
});
例2
map()プロパティ:
Observable.just("Hellp Map Operator")
.map(new Func1() {
@Override
public Integer call(String s) {
return 2015;// map Integer
}
}).map(new Func1() {
@Override
public String call(Integer integer) {
return String.valueOf(integer);// map String
}
}).subscribe(new Action1() {
@Override
public void call(String s) {
System.out.println(s);
}
});
例3
Mapは一対一の変換ですが、一対多の変換はありますか?もちろん、現在説明されているFlatMap FlatMapオペレータは、元のObservableから送信された各データに対して指定された関数を使用して変換操作を実行します.この関数は、自身もデータを送信したObservableを返し、FlatMapはこれらのObservablesから送信されたデータをマージし、最後にマージされた結果を独自のデータシーケンスとして送信します.
private final String url1 = "http://www.iamxiarui.com/wp-content/uploads/2016/06/ .png";
private final String url2 = "http://www.iamxiarui.com/wp-content/uploads/2016/06/ .png";
private final String url3 = "http://www.iamxiarui.com/wp-content/uploads/2016/05/cropped-iamxiarui.com_2016-05-05_14-42-31.jpg";
private final String url4 = "http://www.iamxiarui.com/wp-content/uploads/2016/05/ .png";
// Url private final String[] urls = new String[]{url1, url2, url3, url4};
次にflatmapの処理方法を見てみましょう.
// String UrlObservable.from(urls) .flatMap(new Func1>() {
@Override
public Observable call(String s) {
return Observable.just(s); } })
.map(new Func1() {
@Override
public Bitmap call(String s) {
// Map Bitmap
return GetBitmapForURL.getBitmap(s);
} })
.subscribeOn(Schedulers.io()) // subscribe() IO .observeOn(AndroidSchedulers.mainThread()) // Subscriber UI // , Bitmap, String .subscribe(new Action1() {
@Override
public void call(Bitmap bitmap) { mainImageView.setImageBitmap(bitmap); mainProgressBar.setVisibility(View.GONE);
}
});