Что выведет код Middle Коллекции и последовательности обновлено

groupBy, associateBy и eachCount

Вопрос

Что выведет код? По строке на каждый вывод.

data class Order(val user: String, val sum: Int)

fun main() {
    val orders = listOf(Order("ann", 5), Order("bob", 3), Order("ann", 2))
    println(orders.groupBy { it.user }.mapValues { (_, v) -> v.sumOf { it.sum } })
    println(orders.associateBy { it.user }.mapValues { it.value.sum })
    println(orders.groupingBy { it.user }.eachCount())
    println(orders.maxBy { it.sum }.user)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: {ann=7, bob=3}, {ann=2, bob=3}, {ann=2, bob=1}, ann. groupBy собирает все заказы пользователя, сумма у ann 7. associateBy оставляет один заказ на ключ, последний: у ann это заказ на 2. groupingBy().eachCount() считает количество.

Что выведет

{ann=7, bob=3}
{ann=2, bob=3}
{ann=2, bob=1}
ann

Разбор

groupBy собирает все заказы пользователя, сумма у ann 7. associateBy оставляет один заказ на ключ, последний: у ann это заказ на 2. groupingBy().eachCount() считает количество. Порядок ключей совпадает с порядком первого появления, потому что результат это LinkedHashMap.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.