Si sta osservando l'intersezione di due casi d'uso altrimenti distinti. L'utilizzo di mapToInt(…)
consente di concatenare altre operazioni IntStream
prima dell'operazione del terminale. Al contrario, Collectors.summingInt(…)
può essere combinato con altri collettori, ad es. utilizzato come collettore a valle in un collettore groupingBy
. Per questi casi d'uso, non c'è dubbio su quale usare.
Nel tuo caso particolare, quando non si concatenano più operazioni né si occupano di collezionisti in primo luogo, non vi è alcuna differenza fondamentale tra questi due approcci. Tuttavia, usare quello che è più leggibile ha un punto. Di solito, non usi un raccoglitore, quando c'è una operazione predefinita sullo stream che fa lo stesso. Non useresti collect(Collectors.reducing(…))
quando puoi semplicemente usare .reduce(…)
, vuoi?
Non solo è mapToInt(mapFunc).sum()
cortocircuito, ne consegue anche il solito ordine da sinistra a destra per ciò che accade concettualmente, prima convertire un int
, quindi sommare questi int
s up. Penso che questo giustifichi preferendo questa alternativa su .collect(Collectors.summingInt(mapFunc))
.
Puramente la mia opinione: la seconda è più facile da leggere. –
Se vuoi sapere quale approccio è più efficiente, ma il secondo approccio è molto più chiaro per il lettore IMHO. – Flown