Простым решением является использование замыкания для сравнения, например так:
def partialUnorderedList =["orange", "blue", "red","green"]
def order = "roygbiv".inject([:]){ map, letter -> map[letter] = map.size(); map}
def sortedList = partialUnorderedList.sort{ a, b ->
order[a[0].toLowerCase()] <=> order[b[0].toLowerCase()]
}
Это создает хэш-карту индексов для первых букв цветов.Затем метод сортировки ищет индексы первых методов и сравнивает их.
Это работает, только если вы используете уникальные первые буквы.Чтобы отсортировать полные имена, вы можете сделать что-то вроде этого:
def partialUnorderedList =["orange", "blue", "red","green"]
def order = "red,orange,yellow,green,blue,indigo,violet".split(",").inject([:]){ map, name -> map[name] = map.size(); map}
def sortedList = partialUnorderedList.sort{ a, b ->
order[a.toLowerCase()] <=> order[b.toLowerCase()]
}