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

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

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

16 ответов

20 просмотров

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

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

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 }

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта