Я прохожу курс Kotlin Коанов. И я в секции сгиба .
ДАН
data class Shop(val name: String, val customers: List<Customer>)
data class Customer(val name: String, val city: City, val orders: List<Order>) {
override fun toString() = "$name from ${city.name}"
}
data class Order(val products: List<Product>, val isDelivered: Boolean)
data class Product(val name: String, val price: Double) {
override fun toString() = "'$name' for $price"
}
data class City(val name: String) {
override fun toString() = name
}
и
fun Shop.getOrderedProducts(): Set<Product> =
customers.flatMap(Customer::orders).flatMap(Order::products).toSet()
Вопрос просит меня сделать следующее: Возврат набор продуктов, которые были заказаны всеми покупателями. Вот мой ответ, который по какой-либо причине не принимается ( Вы указали бы ошибку? )
// Return the set of products that were ordered by all customers
fun Shop.getProductsOrderedByAll(): Set<Product> =
customers.flatMap(Customer::orders)
.map(Order::products)
.reduce{ acc, el -> (acc.intersect(el)).toList()}
.toSet()
Вот правильный ответ:
// Return the set of products that were ordered by all customers
fun Shop.getProductsOrderedByAll(): Set<Product> {
val allProducts = customers.flatMap { it.getOrderedProducts() }.toSet()
return customers.fold(allProducts, { orderedByAll, customer ->
orderedByAll.intersect(customer.getOrderedProducts())
})
}
Хотя я не оспариваю их ответ - я могу следовать за ним без проблем - я не понимаю, почему мой ответ неправильный.