Я не уверен, что вы имеете в виду ...
Чтобы перебрать EmployeeData
, вы можете просто использовать each
:
empList.each { println it }
Чтобы найти конкретную запись, вы можете использовать find
:
// Assume EmployeeData has a firstName property, you don't show its structure
EmployeeData anish = empList.find { it.firstName == 'anish' }
Или вы можете найти всех людей с данной фамилией, используя findAll
:
def smiths = empList.findAll { it.surname == 'Smith' }
Зависит от того, что вы хотите - закрытие"сделать ...
Редактировать
Правильно, после того, как вы объяснили свой DSL, который вы хотите, я пришел с этим (который решит данную проблему):
@groovy.transform.Canonical
class EmployeeData {
String firstName
String lastName
}
class Employee {
List<EmployeeData> empList = []
Employee( List<EmployeeData> list ) {
empList = list
}
}
class EmployeeDSL {
Employee root
List propchain = []
EmployeeDSL( Employee root ) {
this.root = root
}
def propertyMissing( String name ) {
// if name is 'add' and we have a chain of names
if( name == 'add' && propchain ) {
// add a new employee
root.empList << new EmployeeData( firstName:propchain.take( 1 ).join( ' ' ), lastName:propchain.drop( 1 ).join( ' ' ) )
// and reset the chain of names
propchain = []
}
else {
// add this name to the chain of names
propchain << name
this
}
}
}
Employee emp = new Employee( [] )
new EmployeeDSL( emp ).with {
anish.nath.add
tim.yates.add
}
emp.empList.each {
println it
}
Используются take()
и drop()
, поэтому вам понадобится Groovy 1.8.1 +
Надеюсь, это имеет смысл!Однако это немного странный синтаксис (используется ключевое слово add
для добавления строк в качестве Employee), и вместо этого может быть лучше придумать что-то похожее на MarkupBuilder
, реализовав BuilderSupport