Ein "Collector", der den verarbeiteten Wert nach dem "Collect" zurückgibt.
Angenommen, Sie haben die folgende Situation:
Vorübergehend in Liste speichern → Aufrufvorgang
List<Integer> mappedList = /* Stream */
./*Stream-Verarbeitung wie Karte*/
.collect(Collectors.toList());
return hogeFunc(mappedList);
Eine solche Verarbeitung kann wie folgt unter Verwendung von "Collectors.collectingAndThen" geschrieben werden.
Collectors.Formular mit collectAndThen
return /* Stream */
./*Stream-Verarbeitung wie Karte*/
.collect(
Collectors.collectingAndThen(
Collectors.toList(),
mappedList -> hogeFunc(mappedList) //Verarbeitung mit mappedList
)
);
Da es nicht erforderlich ist, die Collect-Ergebnisse einzeln in temporären Variablen zu speichern, kann die Anzahl der temporären Variablen reduziert werden. Das Einfügen einer temporären Variablen führt zu einer schlechten Lesbarkeit und Codequalität. Daher bin ich froh, diese zu reduzieren.
Das am Anfang angegebene Codebeispiel kann auch wie folgt geschrieben werden:
Wenn in Form der Übergabe von Argumenten direkt an die Funktion geschrieben
return hogeFunc(
/* Stream */
./*Stream-Verarbeitung wie Karte*/
.collect(Collectors.toList())
);
Dies ist jedoch [^ hosoku], das weniger lesbar ist, insbesondere wenn Funktionen verschachtelt sind. Dies hat außerdem den Nachteil, dass es nicht gelesen werden kann, indem es mit einem Debugger verbunden wird.
[^ hosoku]: Wenn Sie für diese Szene einen Pipeline-Operator haben, müssen Sie nicht einmal Collectors.collectingAndThen
verwenden ...
Verwenden wir "Collectors.collectingAndThen".
Recommended Posts