Ответ 1
Вы смотрите на пересечение двух других различных вариантов использования. Используя mapToInt(…)
, вы можете привязать другие операции IntStream
до операции терминала. Напротив, Collectors.summingInt(…)
можно комбинировать с другими коллекторами, например. используемый в качестве коллектора в коллекторе groupingBy
. Для этих случаев использования нет вопроса о том, что использовать.
В вашем специальном случае, когда вы не цепляете больше операций и не занимаетесь коллекционерами, в первую очередь, нет принципиальной разницы между этими двумя подходами. Тем не менее, использование того, которое более читаемо, имеет смысл. Обычно вы не используете коллекционер, когда есть предопределенная операция в потоке, делающая то же самое. Вы не использовали бы collect(Collectors.reducing(…))
, когда можете просто использовать .reduce(…)
, не могли бы вы?
Не только mapToInt(mapFunc).sum()
shorted, он также следует обычному порядку слева направо для того, что происходит концептуально, сначала конвертируйте в int
, а затем суммируйте эти int
вверх. Я думаю, что это оправдывает предпочтение этой альтернативе над .collect(Collectors.summingInt(mapFunc))
.