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.