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

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

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

16 ответов

8 просмотров

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

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

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 }

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

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

Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
кто шарит: mattermost отслеживает что ты на пк запускаешь?
Valentin
13
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
Всем привет! Стоит задачка, выбрать из выпадающего списка конкретный цвет. Пока реализовал через активацию контрола списка и выбора несколькими нажатиями стрелки вправо до нуж...
Роман.С
9
Карта сайта