Re[8]: mapToInt
От: vsb Казахстан  
Дата: 05.01.15 19:11
Оценка:
Здравствуйте, Yoriсk, Вы писали:

vsb>>mapToInt это следствие того, что в Java все типы делятся на примитивные и классы.


Y>И поэтому деньги в int хранятся?


Да хоть в чём.

Q>>>А `.mapToMyCustomType()` есть?

vsb>>map(u -> u.getAnything()) есть.

Y>У класса user есть поле типа Currency. Как это будет выглядеть в java?


map(u -> u.getAnything()).collect(currencySum())


currencySum это т.н. collector, который пишется один раз и по-хорошему предоставляется разработчиком класса Currency. Пишется в 3 строчки. Можно без лишних функций через reduce, если это делается один раз и не хочется писать реюзабельный код:

        Currency sum = users.stream()
                .filter(u -> u.isActive())
                .map(u -> u.getMoney())
                .reduce(Currency.ZERO, (x, y) -> x.add(y));


Кстати это всё одной строчкой распараллеливается на много потоков, если у нас пользователей многие миллионы. И всё аккуратно посчитается, просуммируется, и вернёт один результат довольно эффективно. Насколько такое однострочное распараллеливание востребовано, я затрудняюсь сказать, я таким вряд ли буду часто пользоваться, но фича такая есть.
Отредактировано 05.01.2015 19:22 vsb . Предыдущая версия . Еще …
Отредактировано 05.01.2015 19:17 vsb . Предыдущая версия .
Отредактировано 05.01.2015 19:12 vsb . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.