zdefiniowałem rekurencyjnej klasy domeny w Grails:Jak zbudować hierarchię drzewa z listy w groovy przy użyciu zamknięcia rekursywnego?
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
}
mam wykazu prac, ale hierarchia struktura nie jest jeszcze zbudowany. Struktura wygląda następująco:
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'),]
Potrzebuję zbudować hierarchiczną relację między tymi pracami, w oparciu o wskazany kod. na przykład A.1 jest pierwszym dziełem dziecka A; B.1.1 jest pierwszym dzieckiem z pracy B.1, którego rodzicem jest B. Wiem, że Groovy wspiera rekursywne zamknięcia w celu zbudowania takiej hierarchicznej struktury. Jak osiągnąć cel, stosując zamknięcie rekurencyjne Groovy, takie jak przykład numer JN2515 Fibonacci, w oficjalnej dokumentacji Groovy? Wielkie dzięki!
Wielkie dzięki za oświecony kod. Powyższy kod działa dla przykładowej listy: działa. Co jeśli potrzebuję pracy w A.1.2 należą do A.1; Praca A.2.2 jest drugim dzieckiem A.2? Po prostu delikatnie edytuj moje pytanie. –
Jeśli chcesz, aby podstrony były uporządkowane, musisz zmienić strukturę danych. Zajrzyj tutaj, http://grails.org/doc/latest/guide/GORM.html#sets,ListsAndMaps. Myślę, że chcesz użyć SortedSet i zaimplementować metodę compareTo w klasie Work. –