Mi ci è voluta più di qualche imprecazione per arrivare a questa implementazione :
fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
return customers.fold(allOrderedProducts, {
orderedByAll, customer ->
orderedByAll.minus( orderedByAll.filter { !customer.orderedProducts.contains(it) }) })
}
Salvo poi scoprire nelle soluzioni che esisteva il magico intersect
fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
// Return the set of products ordered by every customer
return customers.fold(allOrderedProducts, {
orderedByAll, customer ->
orderedByAll.intersect(customer.orderedProducts)
})
}
L’esercizio era questo : https://github.com/Kotlin/kotlin-koans/blob/master/src/ii_collections/_22_Fold_.kt
Comunque Kotlin è bellissimo.