J'ai une liste des célibataires booléennes que je veux convertir en peut-être de la manière suivante:RxJava simple: flatMap si elle est fausse
Passez par chaque émission de la liste dans l'ordre, si l'émission en amont est faux flatMapMaybe
à Maybe.never()
mais si l'émission est vraie abonnez-vous au prochain single dans la liste jusqu'à ce que la liste soit vide.
Voici ce que j'ai jusqu'à présent:
private void subscribeIfAllTrue(List<Single<Boolean>> singles) {
if (singles.isEmpty()) {
return;
}
Single.concat(blockingSingles)
.flatMapMaybe(
(Function<Boolean, MaybeSource<Boolean>>) shouldProgress -> {
if (shouldProgress) {
// flatMap to next single in list.
// if last in list then Maybe.just(true)
} else {
Maybe.never();
// break from list
}
}
}
Cela ne fonctionne évidemment pas puisque nous souscrivons à tous les célibataires via concat mais ce n'est pas le comportement que je veux. Vous vous demandez s'il y avait un opérateur rx à break;
et arrêtez de vous abonner à partir de la liste des abonnements si une émission est fausse, aussi quand last in last retourne juste Maybe.just(true)
. Était à la recherche
La raison principale pour laquelle je ne veux pas abonner à tous les célibataires est que l'émission booléenne en amont effectue un changement d'ui qui, si l'un est faux, ne veut pas déclencher le changement d'ui en se cassant.