class Person { def firstName def lastName def emailAddress } // map constructors bob = new Person(firstName:"Bob", lastName:"Jones", emailAddress:"bob.jones@yahoo.com") rob = new Person(firstName:"Rob", lastName:"Fake", emailAddress:"rob.fake@gmail.com") ray = new Person(firstName:"Ray", lastName:"Real", emailAddress:"ray.real@gmail.com") tom = new Person(firstName:"Tom", lastName:"Real", emailAddress:"tom.real@yahoo.com") mike = new Person(firstName:"Mike", lastName:"Test", emailAddress:"mike.test@msn.com") drew = new Person(firstName:"Drew", lastName:"Wilkins", emailAddress:"dwilkins@aol.com") // list of persons def list = [bob, rob, ray, tom, mike, drew] // handle all cases method def printPersons(list, clos) { list.each() { if(clos(it)) { println "$it.firstName $it.lastName" } } } // results printPersons(list) { it.firstName.startsWith("R") } // firstName starts with 'R' println "*"*20 printPersons(list) { it.emailAddress.contains("yahoo") } // emailAddress contains 'yahoo' println "*"*20 printPersons(list) { it.lastName.getAt(-1) == "e" } // last letter of lastName is 'e' println "*"*20 printPersons(list) { it.lastName.getAt(-1) == "s" } // last letter of lastName is 's' println "*"*20 printPersons(list) { it.emailAddress.contains("gmail") } // emailAddress contains 'gmail'