Подтвердить что ты не робот

Collectors.summingInt() vs mapToInt(). Sum()

Если вы хотите суммировать целочисленное значение из потока, есть два основных способа сделать это:

ToIntFunction<...> mapFunc = ...
int sum = stream().collect(Collectors.summingInt(mapFunc))

int sum = stream().mapToInt(mapFunc).sum()

Первый включает в себя боксирование возвращаемого целого числа и его распаковку, но есть дополнительный шаг во втором.

Что более эффективно/понятно?

4b9b3361

Ответ 1

Вы смотрите на пересечение двух других различных вариантов использования. Используя mapToInt(…), вы можете привязать другие операции IntStream до операции терминала. Напротив, Collectors.summingInt(…) можно комбинировать с другими коллекторами, например. используемый в качестве коллектора в коллекторе groupingBy. Для этих случаев использования нет вопроса о том, что использовать.

В вашем специальном случае, когда вы не цепляете больше операций и не занимаетесь коллекционерами, в первую очередь, нет принципиальной разницы между этими двумя подходами. Тем не менее, использование того, которое более читаемо, имеет смысл. Обычно вы не используете коллекционер, когда есть предопределенная операция в потоке, делающая то же самое. Вы не использовали бы collect(Collectors.reducing(…)), когда можете просто использовать .reduce(…), не могли бы вы?

Не только mapToInt(mapFunc).sum() shorted, он также следует обычному порядку слева направо для того, что происходит концептуально, сначала конвертируйте в int, а затем суммируйте эти int вверх. Я думаю, что это оправдывает предпочтение этой альтернативе над .collect(Collectors.summingInt(mapFunc)).