


Eine ausführliche Erläuterung der Details von RxJava_06 [Bedingungen und Kombinationsoperationen des Übertragungsprozesses]
Dieses Tutorial basiert auf RxJava1 >Die folgende Reihe von Funktionen wird verwendet, um festzustellen, ob die übertragenen Daten übereinstimmen bestimmte Bedingungen.
alle – Bestimmen Sie, ob alle vom Observable ausgegebenen Daten eine bestimmte Bedingung erfüllen. Wenn Daten im ursprünglichen Observable die Bedingung nicht erfüllen, wird False zurückgegeben-
- Contains – Bestimmt, ob ein Observable einen bestimmten Wert ausgibt
- DefaultIfEmpty – Gibt den Wert aus dem ursprünglichen Observable aus, wenn das ursprüngliche Observable nicht ausgegeben hat irgendein Wert, einen Standardwert ausgeben
- SequenceEqual – bestimmen, ob zwei Observables dieselbe Datensequenz ausgeben
- SkipUntil – SkipUntil abonniert das ursprüngliche Observable , ignoriert jedoch seine Emitter, bis das zweite Observable ein Element ausgibt, und beginnt dann mit der Emission des ursprünglichen Observable.
- SkipWhile – SkipWhile abonniert das ursprüngliche Observable, ignoriert jedoch dessen Emitter bis zu diesem Zeitpunkt Wenn eine bestimmte von Ihnen angegebene Bedingung falsch wird, beginnt die Ausgabe des ursprünglichen Observable.
- TakeUntil – verwendet eine Prädikatfunktion anstelle eines zweiten Observable, um zu bestimmen, ob die ausgegebenen Daten beendet werden müssen. Es verhält sich ähnlich wie takeWhile.
- TakeWhile – TakeWhile gibt das ursprüngliche Observable aus, bis eine bestimmte von Ihnen angegebene Bedingung nicht wahr ist. An diesem Punkt stoppt es die Ausgabe des ursprünglichen Observable und beendet sein eigenes Observable.
- 1.all
Sie dürfen bei der Einschreibung in die Schule nicht älter als 20 Jahre sein Sie können die All-Funktion zur Beurteilung verwenden.
private ArrayList<Student> initStudents() { ArrayList<Student> persons = new ArrayList<>(); persons.add(new Student("张三", 16)); persons.add(new Student("李四", 21)); persons.add(new Student("王二麻子", 18)); return persons; }
2.Amb
Observable<Student> observable = Observable.from(initStudents()); Observable<Boolean> booleanObservable = observable.all(new Func1<Student, Boolean>() { //设置判断规则 @Override public Boolean call(Student student) { return student.age<20; } }); booleanObservable.subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { //这里打印了false 因为学生里面李四21岁 Log.i(TAG, "call: "+aBoolean); } });
3.Contains
Observable<String> o1 = Observable.just("a", "b", "c"); Observable<String> o2 = Observable.just("d", "f", "e"); //判断上面的2个被观察者对象哪个先发送数据 发送数据慢的被观察者将被忽略 Observable<String> observable = Observable.amb(o2,o1); observable.subscribe(new Action1<String>() { @Override public void call(String s) { Log.i(TAG, "call: "+s); } });
4.DefaultIfEmpty
Observable<String> o1 = Observable.just("a", "b", "c"); Observable<Boolean> observable = o1.contains("a"); observable.subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { //true Log.i(TAG, "call: "+aBoolean); } }
Observable<String> o1 = Observable .create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { //这里没有发送任何onNext事件,而是调用onCompleted()事件 subscriber.onCompleted(); } }); //如果上面的o1不发送任何onNext而结束 则发送一个默认的值d Observable<String> o2 = o1.defaultIfEmpty("d"); o2.subscribe(new Action1<String>() { @Override public void call(String s) { //打印d Log.i(TAG, "call: "+s); } });
5.SequenceEqual
Bestimmt, ob zwei Observablen dieselbe Datensequenz aussenden. Es werden die Emissionen der beiden Observablen verglichen (gleiche Reihenfolge, gleicher Beendigungsstatus), gibt es „true“ aus, andernfalls gibt es „false“ aus.6.1 SkipUntil
Observable<Integer> o1 = Observable.just(1,2,3); Observable<Integer> o2 = Observable.just(1,2,3); Observable<Boolean> observable = Observable.sequenceEqual(o1, o2); observable.subscribe(new Action1<Boolean>() { @Override public void call(Boolean aBoolean) { Log.i(TAG, "call: "+aBoolean); } });
Ausgabe:
Observable<Integer> o1 = Observable.just(1,2,3); Observable<Integer> o2 = o1.skipUntil(Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { //如果不发送如下信息 则上面的1,2,3都不会发送 //如果发送了4 则直接发送1,2,3 但是4 5并没有发送 subscriber.onNext(4); subscriber.onNext(5); } })); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
6.2 SkipUntil
call: 1 call: 2 call: 3
Ausgabe:
Observable<Integer> o1 = Observable.just(1,2,3,4,5,6); Observable<Integer> o2 = o1.skipWhile(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer value) { //直到发送的数据"等于"4 才开始从4发送数据 这里打印4,5,6 return value!=4; } }); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
7.1 TakeUntil
call: 4 call: 5 call: 6
Der obige Code ähnelt:
Observable<Integer> o1 = Observable.just(1,2,3,4,5,6); Observable<Integer> o2 = o1.takeUntil(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer value) { //发送数据直到等于4才停止发送 return value==4; } }); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
7.2 TakeWhile
ArrayList<Integer> datas=new ArrayList<>(); for (int i = 1; i <= 6 ; i++) { datas.add(i); } int index=0; while(datas.get(index)<=4){ Log.i(TAG, "onCreate: "+datas.get(index)); index++; }
Der obige Code gibt 1~4 aus, ähnlich der folgenden while-Anweisung:
Observable<Integer> o1 = Observable.just(1,2,3,4,5,6); Observable<Integer> o2 = o1.takeWhile(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer integer) { //发送数据 直到发送的数据等于才停止发送 return integer!=5; } }); o2.subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: "+value); } });
ArrayList<Integer> datas=new ArrayList<>(); for (int i = 1; i <= 6 ; i++) { datas.add(i); } int index=0; while(datas.get(index)!=5){ Log.i(TAG, "onCreate: "+datas.get(index)); index++; }
Merge – Verschachteltes Zusammenführen von Emissionen aus mehreren Observablen
- StartWith – Fügt das angegebene Element am Anfang der Datensequenz ein
- Zip – Füge die Emissionsdaten von zwei Observablen gemäß den von der Funktion bereitgestellten Regeln zusammen. Die Gesamtzahl der Emissionsdaten basiert auf der Mindestanzahl der beobachtbaren Emissionen.
- 8.Zusammenführen
Ausgabe
Observable<Integer> odds = Observable.just(1, 3, 5).subscribeOn(someScheduler); Observable<Integer> evens = Observable.just(2, 4, 6); Observable.merge(odds, evens) .subscribe(new Subscriber<Integer>() { @Override public void onNext(Integer item) { System.out.println("Next: " + item); } @Override public void onError(Throwable error) { System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted() { System.out.println("Sequence complete."); } });
9.StartWith
Next: 1 Next: 3 Next: 5 Next: 2 Next: 4 Next: 6 Sequence complete.
Wenn Sie möchten, dass ein Observable eine bestimmte Datensequenz ausgibt, bevor es Daten ausgibt, können Sie den StartWith-Operator verwenden. (Wenn Sie eine Datensequenz an das Ende der von einem Observable ausgegebenen Daten anhängen möchten, können Sie den Concat-Operator verwenden.)
Observable<String> o1 = Observable.just("模拟网络请求"); Observable<String> o2 = o1.startWith("网络请求之前的准备工作"); o2.subscribe(new Action1<String>() { @Override public void call(String value) { Log.i(TAG, value); } });
输出:
网络请求之前的准备工作 模拟网络请求
类似的函数有:
Javadoc: startWith(Iterable))
Javadoc: startWith(T)) (最多接受九个参数)
Javadoc: startWith(Observable))
10.Zip
假设被观察者o1发送的数据为1 2 ,被观察者o2发送的数据为3,4,5。那么zip压缩发送的数据个数以最低个也就是2个为准。并且 新发送的每个数据以Func2的返回数据为准。
Javadoc: zip(Observable1,Observable2,Func2));
示例代码如下:
Observable<Integer> o1 = Observable.just(1,2); Observable<Integer> o2 = Observable.just(3,4,5); Observable<Integer> zipObservable = Observable .zip(o1, o2, new Func2<Integer, Integer, Integer>() { @Override public Integer call(Integer o, Integer o2) { return o + o2; } }); zipObservable.subscribe(new Action1<Integer>() { @Override public void call(Integer s) { Log.i(TAG, "call: "+s); } });
输出如下:
call: 4 // 1+3 call: 6 // 2+4
以上就是深入浅出RxJava_06[传输过程的条件&组合操作]的详情的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

