diff --git a/src/main.kt b/src/main.kt index d1f117c..40362d0 100644 --- a/src/main.kt +++ b/src/main.kt @@ -73,37 +73,47 @@ fun Shop.example(): Int? = customers.map { it.orders }.flatten().find { it.id == //TODO //Преобразовать список клиентов в сет -fun Shop.getSetOfCustomers(): Set = setOf() +fun Shop.getSetOfCustomers(): Set = customers.toSet() // Вернуть сет городов в которых проживают клиенты -fun Shop.getCitiesCustomersAreFrom(): Set = setOf() +fun Shop.getCitiesCustomersAreFrom(): Set = customers.map { it.city }.toSet() // Вернуть список клиентов из представленного города -fun Shop.getCustomersFrom(city: City): List = listOf() +fun Shop.getCustomersFrom(city: City): List = customers.filter { it.city == city } // Вернуть true если хоть один клиент из выбранного города -fun Shop.hasCustomerFrom(city: City): Boolean = false +fun Shop.hasCustomerFrom(city: City): Boolean = customers.any() { it.city == city } // Вернуть количество клментов из выбранного города -fun Shop.countCustomersFrom(city: City): Int = 0 +fun Shop.countCustomersFrom(city: City): Int = customers.filter { it.city == city }.count() // Вернуть клиента из выбранного города или null, если нет таких -fun Shop.findAnyCustomerFrom(city: City): Customer? = null +fun Shop.findAnyCustomerFrom(city: City): Customer? = customers.firstOrNull() {it.city == city} // Вернуть сет всех продуктов заказанных клиентом -fun Customer.getOrderedProducts(): Set = setOf() +fun Customer.getOrderedProducts(): Set = orders.flatMap {it.products}.toSet() // Отсортировать клиентов по количеству заказов от меньшего к большему -fun Shop.getCustomersSortedByNumberOfOrders(): List = listOf() +fun Shop.getCustomersSortedByNumberOfOrders(): List = customers.sortedBy { it.orders.count() } // Вернуть словарь в котором названия городов являются ключами, а значениями - сет клиентов, проживающих в этом городе -fun Shop.groupCustomersByCity(): Map> = mapOf() + +@OptIn(ExperimentalStdlibApi::class) +fun Shop.groupCustomersByCity(): Map> = buildMap > { + customers.map { it.city }.forEach() { + put(it.title, customers.filter { key -> key.city == it }.toSet()) + } +} // Вернуть сет клиентов, у которых не доставленных заказов больше чем заказанных -fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set = setOf() +fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set = customers.filter { + it.orders.count { key -> key.isDelivered } < it.orders.count {key -> !key.isDelivered} +}.toSet() // Вернуть наиболее дорогой продукт из всех доставленных -fun Customer.getMostExpensiveDeliveredProduct(): Product? = null +fun Customer.getMostExpensiveDeliveredProduct(): Product? = + orders.filter { it.isDelivered }.flatMap { it.products }.maxByOrNull { it.price } // Вернуть число - сколько раз был заказан выбранный продукт -fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int = 0 \ No newline at end of file +fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int = + customers.flatMap { it.orders }.flatMap { it.products }.count { it == product } \ No newline at end of file