So ketten Sie die groupBy () -Methoden von mehreren RxJava wie groupBy (). groupBy ()

9

Gegebene Eingabe:

%Vor%

Gruppiere die Zahlen durch ungerade oder gerade und dann um weniger als oder größer als 5.

Erwartete Ausgabe:

%Vor%

Die Reihenfolge der Ausgabe ist nicht eingeschränkt.

Ich verwende jetzt den folgenden Ansatz:

%Vor%

Beachten Sie, dass ObservableUtils von mir geschrieben wurde, um den Code zu vereinfachen.

Aber ich bin nicht damit zufrieden, weil es immer noch nicht kurz genug ist, um nur das Ziel anzuzeigen.

Was ich erwartet habe, ist wie folgt:

%Vor%

Für den Moment kann ich es nur verkleinern:

%Vor%

Ich muss immer noch die OperatorGroupByGroup-Klasse schreiben, die ein bisschen komplex ist. Irgendwelche Vorschläge zur Verbesserung?

    
changyuheng 30.01.2015, 07:14
quelle

3 Antworten

2

Ich habe ein Beispiel für OperatorGroupByGroup geschrieben, das auf OperatorGroupBy basiert:

Ссылка

Verwendung:

%Vor%

Aber ich habe den Testcode aufgrund meiner OperatorGroupByGroup-Implementierung geändert:

%Vor%

Ich denke, jemand würde es besser machen.

    
Andrew Chen 30.01.2015 17:44
quelle
2

Versuchen Sie es auf diese Weise.

%Vor%     
QFox 27.05.2016 13:00
quelle
1

Ich habe zwei Vorschläge, von denen ich denke, dass sie beide sehr prägnant und elegant sind.

Erstens:

%Vor%

Was fast genauso gut ist wie Ihre Erwartung, nur ein zusätzliches .flatMap() . Das einzige Problem? Du verlierst den ersten Schlüssel, aber ich bin mir nicht sicher, ob du diese überhaupt verwendest.

Zweitens muss eine einfache Key -Klasse deklariert werden, die Ergebnisse Ihrer beiden Bedingungen enthält und die richtige equals() -Implementierung hat. Mit anderen Worten ein Pair . Dann können Sie tun:

%Vor%

Dies hat den Nachteil, dass es weniger zusammensetzbar ist, da Sie beide Bedingungen im selben .groupBy() -Aufruf haben anstatt verkettet. Der Vorteil ist, dass Sie einen kombinierten Schlüssel verwenden können, der Ergebnisse Ihrer beiden Bedingungen enthält, wenn Sie sie benötigen.

    
Marcin Koziński 27.05.2016 20:48
quelle