这是一个简单的 Kotlin 问题
Implement Shop.getSetOfProductsOrderedByEveryCustomer() using fold.
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"
}
解决方案看起来像这样
fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
val allProducts = customers.flatMap { it.orders.flatMap { it.products }}.toSet()
return customers.fold(allProducts, {
orderedByAll, customer ->
orderedByAll.intersect(customer.orders.flatMap { it.products }.toSet())
})
}
所以,据我了解,这条线
val allProducts = customers.flatMap { it.orders.flatMap { it.products }}.toSet()
足以获得所有购买的清单。
为什么要表演fold()?
仅仅是因为问题的条件还是有意义?
因为据我所知,在这种情况下它做同样的事情......
解决方案很简单,有必要退回一组产品,其中包括按每个买家的顺序排列的产品。
假设一个是有序
АВС的,另一个是唯一的В,所以这个方法(在我的问题的描述中)将返回一个仅包含一个产品的集合
В。因为它被第一个和第二个买家包含。