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?
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.
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:
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.
Tags und Links java android reactive-programming rx-java