


Une explication approfondie des détails de RxJava_06 [Conditions et opérations de combinaison du processus de transmission]
Ce tutoriel est basé sur RxJava1>La série de fonctions suivante est utilisée pour déterminer si les données transmises sont conformes. certaines conditions.
tout - Détermine si toutes les données émises par l'Observable remplissent une certaine condition. Si des données de l'Observable d'origine ne remplissent pas la condition, False est renvoyé-
- Contient - Détermine si un observable émet une valeur spécifique
- DefaultIfEmpty - Émet la valeur de l'observable d'origine si l'observable d'origine n'a pas émis n'importe quelle valeur, émet une valeur par défaut
- SequenceEqual - détermine si deux observables émettent la même séquence de données
- SkipUntil - SkipUntil s'abonne à l'observable d'origine , mais ignore ses émetteurs jusqu'à ce que le deuxième Observable émette un élément, lorsqu'il commence à émettre l'Observable d'origine.
- SkipWhile - SkipWhile s'abonne à l'Observable d'origine, mais ignore son émetteur, jusqu'au moment une certaine condition que vous spécifiez devient fausse, elle commence à émettre l'Observable d'origine.
- TakeUntil - utilise une fonction de prédicat au lieu d'un deuxième observable pour déterminer si les données émises doivent être terminées. Il se comporte de la même manière que takeWhile.
- TakeWhile - TakeWhile émet l'observable d'origine jusqu'à ce qu'une certaine condition que vous spécifiez ne soit pas vraie, auquel cas il arrête d'émettre l'observable d'origine et met fin à son propre observable.
- 1.all
Vous devez avoir au maximum 20 ans lorsque vous entrez à l'école. peut utiliser la fonction all pour juger.
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
Détermine si deux observables émettent la même séquence de données. Il comparera les émissions des deux observables si les deux séquences sont identiques (mêmes données, la. même ordre, même statut de terminaison), il émet vrai, sinon il émet faux.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); } });
Sortie :
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
Sortie :
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
Le code ci-dessus est similaire à :
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++; }
Le code ci-dessus imprime 1 ~ 4, similaire à l'instruction while suivante :
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++; }
Fusion - Fusion entrelacée des émissions de plusieurs observables
- StartWith - Insère l'élément spécifié au début de la séquence de données
- Zip - Fusionner les données d'émission de deux observables selon les règles fournies par la fonction. Le nombre total de données d'émission doit être basé sur le nombre minimum d'émissions observables.
- 8.Fusionner
Sortie
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.
Si vous souhaitez qu'un observable émette une séquence de données spécifiée avant d'émettre des données, vous pouvez utiliser l'opérateur StartWith. (Si vous souhaitez ajouter une séquence de données à la fin des données émises par un observable, vous pouvez utiliser l'opérateur Concat.)
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)!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

L'article discute de l'utilisation de JPA pour la cartographie relationnelle des objets avec des fonctionnalités avancées comme la mise en cache et le chargement paresseux. Il couvre la configuration, la cartographie des entités et les meilleures pratiques pour optimiser les performances tout en mettant en évidence les pièges potentiels. [159 caractères]

L'article discute de l'utilisation de Maven et Gradle pour la gestion de projet Java, la construction de l'automatisation et la résolution de dépendance, en comparant leurs approches et leurs stratégies d'optimisation.
