Un «Collector» qui renvoie la valeur traitée après le «Collect».
Supposons que vous ayez la situation suivante:
Stocker temporairement dans la liste → processus d'appel
List<Integer> mappedList = /* Stream */
./*Traitement de flux tel que la carte*/
.collect(Collectors.toList());
return hogeFunc(mappedList);
Un tel traitement peut être écrit comme suit en utilisant Collectors.collectingAndThen
.
Collectors.Formulaire utilisant la collecteAndThen
return /* Stream */
./*Traitement de flux tel que la carte*/
.collect(
Collectors.collectingAndThen(
Collectors.toList(),
mappedList -> hogeFunc(mappedList) //Traitement à l'aide de mappedList
)
);
Puisqu'il n'est pas nécessaire de stocker les résultats de collecte dans des variables temporaires une par une, le nombre de variables temporaires peut être réduit. Mettre une variable temporaire conduit à une mauvaise lisibilité et une mauvaise qualité du code, je suis donc heureux de la réduire.
L'exemple de code donné au début peut aussi s'écrire:
Lorsqu'il est écrit sous la forme de passer des arguments directement à la fonction
return hogeFunc(
/* Stream */
./*Traitement de flux tel que la carte*/
.collect(Collectors.toList())
);
Cependant, il s'agit de [^ hosoku], qui est moins lisible, surtout lorsque les fonctions sont imbriquées. De plus, cela présente l'inconvénient de ne pas pouvoir être lu en le raccordant à un débogueur.
[^ hosoku]: Pour cette scène, si vous avez un opérateur de pipeline, vous n'avez même pas besoin d'utiliser Collectors.collectingAndThen
...
Utilisons Collectors.collectingAndThen
.
Recommended Posts