diff --git a/src/main.kt b/src/main.kt index d1f117c..15adffd 100644 --- a/src/main.kt +++ b/src/main.kt @@ -73,37 +73,45 @@ 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}.toSet().size // Вернуть клиента из выбранного города или null, если нет таких -fun Shop.findAnyCustomerFrom(city: City): Customer? = null +fun Shop.findAnyCustomerFrom(city: City): Customer? = customers.find{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> { + val cities = getCitiesCustomersAreFrom() + return cities.associate { it.title to getCustomersFrom(it).toSet() } +} // Вернуть сет клиентов, у которых не доставленных заказов больше чем заказанных -fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set = setOf() +fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set = + customers.filter{ (it.orders.filter { !it.isDelivered }.size) > (it.orders.filter { it.isDelivered }.size)}.toSet() // Вернуть наиболее дорогой продукт из всех доставленных -fun Customer.getMostExpensiveDeliveredProduct(): Product? = null +fun Customer.getMostExpensiveDeliveredProduct(): Product? { + val products = orders.filter{it.isDelivered}.flatMap {it.products} + val mPrice = products.maxOfOrNull { it.price } + return products.find { it.price==mPrice } +} // Вернуть число - сколько раз был заказан выбранный продукт -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