Сообщение 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?
currencySum это т.н. collector, который пишется один раз и по-хорошему предоставляется разработчиком класса Currency. Пишется в 3 строчки. Можно без лишних функций через reduce, если это делается один раз и не хочется писать реюзабельный код:
Кстати это всё одной строчкой распараллеливается на много потоков, если у нас пользователей многие миллионы. И всё аккуратно посчитается, просуммируется, и вернёт один результат довольно эффективно.
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?
currencySum это т.н. collector, который пишется один раз и по-хорошему предоставляется разработчиком класса Currency. Пишется в 3 строчки. Можно без лишних функций через reduce, если это делается один раз и не хочется писать реюзабельный код:
Кстати это всё одной строчкой распараллеливается на много потоков, если у нас пользователей многие миллионы. И всё аккуратно посчитается, просуммируется, и вернёт один результат довольно эффективно. Насколько такое однострочное распараллеливание востребовано, я затрудняюсь сказать, я таким вряд ли буду часто пользоваться, но фича такая есть.
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));
Кстати это всё одной строчкой распараллеливается на много потоков, если у нас пользователей многие миллионы. И всё аккуратно посчитается, просуммируется, и вернёт один результат довольно эффективно. Насколько такое однострочное распараллеливание востребовано, я затрудняюсь сказать, я таким вряд ли буду часто пользоваться, но фича такая есть.