169 похожих чатов

А можно как-нибудь более компактно и без !! написать такое? itemList

.groupBy { it.userId }
.mapValues { it.value.maxByOrNull(Item::createdAt)!! }

16 ответов

24 просмотра

Ну без !! не получится, потому что нет гарантий, что там есть максимум

Пока, видимо, нет

Denis-Kalinochkin Автор вопроса
Denis Kalinochkin
Но там точно непустые списки

Во-первых компилятор об этом не знает. Во-вторых maxBy может возвращать null на непустом списке. Посмотрите его описание

Alexander Nozik
Ну без !! не получится, потому что нет гарантий, ч...

Не совсем правда, очень даже получится, просто совсем красивых решений из коробки нет. Но можно вынести, если нужно: fun main() { val itemsList = listOf(Item("a"), Item("b")) itemsList .groupingBy { it.userId } .aggregate { key, acc: Item?, curr, first -> if (acc == null) curr else maxOf(acc, curr, compareBy { it.createdAt }) } itemsList.groupingBy { it.userId }.eachMaxBy { it.createdAt } } fun <K, V, R: Comparable<R>> Grouping<V, K>.eachMaxBy(selector: (V) -> R) = aggregate { key, acc: V?, curr, first -> if (acc == null) curr else maxOf(acc, curr, compareBy(selector)) }

Alex Levin
Не совсем правда, очень даже получится, просто сов...

Хорошо. Вы просто перехватывайте случай пустого списка раньше. Не уверен, что оно чем-то лучше. Но согласен, что можно придумать решение, если залезть в реализацию.

Alexander Nozik
Хорошо. Вы просто перехватывайте случай пустого сп...

Так это не я делаю, aggregate в groupingBy знает о том, что списки непустые

Vladimir Petraković
Да не может в groupBy быть пустой список

Я не спорю. Но нет способа сообщить об этом тому, кто этот список будет использовать. Поэтому это тот случай, когда !! уместно

Alex Levin
Так это не я делаю, aggregate в groupingBy знает о...

Просто проблема, что на Grouping есть два с половиной экстеншна вместо вагона.

Alex Levin
Просто проблема, что на Grouping есть два с полови...

Это может быть тот случай, что лекарство вреднее болезни. Grouping вообще довольно эзотерическая штука

Alexander Nozik
Это может быть тот случай, что лекарство вреднее б...

Да не особо вреднее, просто удобная объединялка в условно одну операцию цепочек вроде groupBy(...).mapValues(...)

Alex Levin
Да не особо вреднее, просто удобная объединялка в ...

Она сделана для ленивой редукции. Но исползовать ее сложновато

Alexander Nozik
Она сделана для ленивой редукции. Но исползовать е...

Так ничего сложного, просто там завезли вместо всей портянки экстеншнов только базовые aggregate/fold/reduce и только один конкретный eachCount

Alex Levin
Так ничего сложного, просто там завезли вместо все...

Ну я в свое время игрался, как-то оно не очень хорошо ложится

Alexander Nozik
Ну я в свое время игрался, как-то оно не очень хор...

Ну вот вроде с готовыми экстеншнами выглядит норм: itemsList.groupingBy { it.userId }.eachMaxBy { it.createdAt }

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта