Wie kombiniere 3 oder mehr CompletionStages?

Wenn 2 CompletionStages kann ich kombinieren Sie mit thenCombine Methode:

CompletionStage<A> aCompletionStage = getA();
CompletionStage<B> bCompletionStage = getB();
CompletionStage<Combined> combinedCompletionStage =
    aCompletionStage.thenCombine(bCompletionStage, (aData, bData) -> combine(aData, bData));

Wenn ich 3 oder mehr CompletionStages ich kann eine Kette von thenCombine Methoden, aber ich habe eine temporäre Objekte übergeben die Ergebnisse. Zum Beispiel, hier ist eine Lösung mit Pair und Triple von der org.apache.commons.lang3.tuple Paket:

CompletionStage<A> aCompletionStage = getA();
CompletionStage<B> bCompletionStage = getB();
CompletionStage<C> cCompletionStage = getC();
CompletionStage<D> dCompletionStage = getD();

CompletionStage<Combined> combinedDataCompletionStage =
        aCompletionStage.thenCombine(bCompletionStage, (Pair::of))
                .thenCombine(cCompletionStage, (ab, c) ->
                        Triple.of(ab.getLeft(), ab.getRight(), c))
                .thenCombine(dCompletionStage, (abc, d) ->
                        combine(abc.getLeft(), abc.getMiddle(), abc.getRight(), d));

Gibt es eine bessere Art und Weise zu kombinieren, die Ergebnisse von mehreren CompletionStages?

  • Ich verstehe nicht, was Sie zu tun versuchen. Was ist Ihre combine Methode? Was ist Ihr Zweck? Was willst du mit der CompletionStages? Wer ist der Verbraucher am Ende? Was sollte die Folge sein, die Sie erhalten?
  • combine ist eine Funktion, die 4 Parameter und Rückgabe 1 Combined. Der Verbraucher kann zum Beispiel eine andere Funktion, die Combined als parameter und Rückgabe einem anderen CompletionStage, die aufgerufen wird, mit combinedDataCompletionStage.thenCompose(...).
Schreibe einen Kommentar