Информация об изменениях

Сообщение Re[8]: mapToInt от 05.01.2015 19:11

Изменено 05.01.2015 19:22 vsb

Здравствуйте, 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));


Кстати это всё одной строчкой распараллеливается на много потоков, если у нас пользователей многие миллионы. И всё аккуратно посчитается, просуммируется, и вернёт один результат довольно эффективно.
Re[8]: mapToInt
Здравствуйте, 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));


Кстати это всё одной строчкой распараллеливается на много потоков, если у нас пользователей многие миллионы. И всё аккуратно посчитается, просуммируется, и вернёт один результат довольно эффективно. Насколько такое однострочное распараллеливание востребовано, я затрудняюсь сказать, я таким вряд ли буду часто пользоваться, но фича такая есть.