2017-02-02 4 views
0

J'ai une même question comme celle-ci RxJava Subject with Backpressure - only let the last value emit once downstream has finished consuming mais à la place je veux tous les éléments qui ont émis (liste de tous les éléments tamponnés) tandis que l'aval est occupé dans la consommationRxJava Sujet avec Backpressure - laisser toute la liste à émettre une fois en aval consommé

public static void main(String[] args) throws Exception { 
     Subject<Boolean> loadingQueue = 
       PublishSubject.<Boolean>create().toSerialized(); 

loadingQueue 
    .toFlowable(BackpressureStrategy.BUFFER) 
    .delay(0, TimeUnit.MILLISECONDS, Schedulers.single())  // <------- 
    .map(discarded -> { 
    // PRE-LOADING 
    System.out.println("PRE-LOADING: " 
     + Thread.currentThread().getName()); 
    return discarded; 
    }) 
    .delay(0, TimeUnit.MILLISECONDS, Schedulers.computation()) // <------- 
    .map(b -> { 
     System.out.println("LOADING: " 
     + Thread.currentThread().getName()); 
    Thread.sleep(2000); 
    return b; 
    }) 
    .delay(0, TimeUnit.MILLISECONDS, Schedulers.single())  // <------- 
    .rebatchRequests(1)    // <----------------------------------- one-by-one 
    .subscribe(b -> { 
     System.out.println("FINISHED: " 
      + Thread.currentThread().getName() + "\n\n"); 
    }); 


loadingQueue.onNext(true); 
loadingQueue.onNext(true); 
loadingQueue.onNext(true); 

Thread.sleep(10000); 

}

fonctionner, mais au lieu d'obtenir un objet, un par un, je veux la liste de tous l'élément tampon à la fois et tout occupé en aval, je veux créer une autre liste et ainsi de suite

+0

Je suis désolé, cela nécessite un opérateur personnalisé non trivial. – akarnokd

+0

@akarnokd que pensez-vous que la solution ci-dessous est bien ou d'autres cas doivent gérer ?? –

+0

Je ne suis pas sûr si vous obtiendrez le même modèle PRE-CHARGEMENT et FINI, mais si cela fonctionne pour vous, alors allez-y. De même, évitez les postages croisés - cela n'a probablement aucun avantage car je vais également répondre à la liste des problèmes de RxJava. – akarnokd

Répondre

0

I f Inally trouvé un moyen d'atteindre les éléments émis sous la forme de liste quand un événement arrive et commencer une autre liste jusqu'à ce que l'autre événement se produise