Как объединить коллекцию элементов c одинаковым id?
Есть коллекция объектов:
data class VideoStatistic(val id: String, val viewingTime: Long)
В эту коллекцию может попасть несколько видео с одинаковыми id, но разным временем просмотра. Например, VideoStatistic(1, 2) и VideoStatistic(1, 3).
Как мне объединить такие элементы, чтобы в результате получить коллекцию, в которой будет лежать VideoStatistic(1, 5)?
Ответы (1 шт):
Автор решения: Vadik
→ Ссылка
Предположим, у вас есть коллекция объектов:
val statistics: Collection<VideoStatistic> =
listOf(
VideoStatistic("1", 2),
VideoStatistic("1", 3),
VideoStatistic("2", 2),
)
С помощью стандартной функции groupBy это можно сделать следующим образом:
val mergedStatistics: Collection<VideoStatistic> =
statistics.groupBy(VideoStatistic::id, VideoStatistic::viewingTime)
.mapValues { (id, viewingTimes) ->
VideoStatistic(id, viewingTimes.sum())
}
.values
На выходе получаем:
[VideoStatistic(1, 5), VideoStatistic(2, 2)]