[iteratori e blocchi] Refactoring: estraggo predicati e iteratori 1. "split loop" in due: filtro e invio messaggio 2. separare "traverse collection" da "evaluate items" 3. introdurre predicato: interfaccia e BornOn 4. introdurre iteratore interno: classe che elabora la collezione 5. [zucchero] facade creazione On 6. [zucchero] facade creazione Being; inline classi predicato? Esercizio: mandare un bacio a tutte le donne 1. unit test BirthdayService con due employee, uno donna 2. introduco Gender 3. On.items().collect(female) 4. [zucchero] sposto female su Being Esercizio: altre funzionalità degli iteratori 1. unit test collect(even) 2. iteratori e blocchi generici 3. find first 4. null if not found 5. reject 6. contains Nice to have: * simple transformation: Doubler * transformation from to: ToString * transformation from to: dammi l'email di tutti gli impiegati Cos'altro? * For.each(items).execute(action) * Apache Common Collections * altri linguaggi: C# e Ruby