ho definito la classe del dominio ricorsiva in graal:come si costruisce una gerarchia ad albero da una lista in groovy usando la chiusura ricorsiva?
class Work {
String code
String title
String description
static hasMany = [subWorks:Work]
static mappedBy = [subWorks: 'parentWork']
Work getRootWork(){
if(parentWork) return parentWork.getRootWork()
else return this
}
boolean isLeafWork(){
return subWorks.isEmpty()
}
boolean isRootWork(){
return !parentWork
}
ho una lista dei lavori, ma la struttura gerarchia non è ancora costruito. La struttura si presenta come:
def works = [new Work(code:'A', title:'TitleA'),
new Work(code:'B', title:'TitleB'),
new Work(code:'A.1', title:'Titile A.1'),
new Work(code:'B.1', title:'Title B.1'),
new Work(code:'B.2', title:'Title B.2'),
new Work(code:'B.3', title:'Title B.3'),
new Work(code:'B.2.2', title:'Title B.2.2'),
new Work(code:'B.2.3', title:'Title B.2.3'),
new Work(code:'A.1.1', title:'Title A.1.1'),
new Work(code:'A.1.2', title:'Title A.1.2'),]
Che cosa ho bisogno è quello di costruire la relazione gerarchica tra queste opere, basato sul codice accennato. per esempio. A.1 è il primo figlio di A; B.1.1 è il primo figlio di B.1 lavoro, il cui genitore è B lavoro. So che Groovy supporta chiusure ricorsive per costruire questo tipo di struttura gerarchica. Come raggiungo il mio obiettivo utilizzando la chiusura ricorsiva di Groovy, come nell'esempio del numero di Fibonacci JN2515, nella documentazione ufficiale di Groovy? Mille grazie!
Mille grazie per il codice illuminato. Il codice sopra funziona per l'elenco di esempio: funziona. Cosa succede se ho bisogno di lavoro A.1.2 appartenere a A.1; A.2.2 lavoro è il secondo figlio di A.2? Modifica leggermente la mia domanda. –
Se si desidera eseguire sottWorks in modo ordinato, è necessario modificare la struttura dei dati. Guarda qui, http://grails.org/doc/latest/guide/GORM.html#sets,ListsAndMaps. Penso che tu voglia usare SortedSet e implementare il metodo compareTo nella classe Work. –