diff --git a/src/main.kt b/src/main.kt index d1f117c..3ac7186 100644 --- a/src/main.kt +++ b/src/main.kt @@ -73,37 +73,43 @@ 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.count { it.city == city } // Вернуть клиента из выбранного города или 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.size } // Вернуть словарь в котором названия городов являются ключами, а значениями - сет клиентов, проживающих в этом городе -fun Shop.groupCustomersByCity(): Map> = mapOf() +fun Shop.groupCustomersByCity(): Map> = buildMap { + customers.map { it.city.title }.forEach { put(it, customers.filter { cust -> cust.city.title == it}.toSet()) } +} // Вернуть сет клиентов, у которых не доставленных заказов больше чем заказанных -fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set = setOf() +fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set = customers.filter { (it.orders.count { order -> order.isDelivered } + < it.orders.count { order -> !order.isDelivered})}.toSet() // Вернуть наиболее дорогой продукт из всех доставленных -fun Customer.getMostExpensiveDeliveredProduct(): Product? = null +fun Customer.getMostExpensiveDeliveredProduct(): Product? = + orders.filter { it.isDelivered }.flatMap { it.products } + .maxByOrNull { product -> product.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