Предположим, ваш класс CustomObject
выглядит следующим образом:
class CustomObject(val name: String, val children: List[CustomObject])
и вы сказали, что уровень детей неизвестен.
Затем вы можете использовать следующую функцию для рекурсивной сортировки List
из CustomObject
s:
def sortCustomObjects(a: List[CustomObject]): List[CustomObject] = {
a.sortBy(_.name).map(co => new CustomObject(co.name, sortCustomObjects(co.children)))
}
Пожалуйста, обратите внимание - я использую рекурсию, а не хвостовую рекурсию - поэтому вы можете получить StackOverflow
при больших входах.
UPD 1:
Вы также можете определить CustomeObject
как case class
и использовать метод .copy
более функциональным способом:
case class CustomObject(name: String, children: List[CustomObject])
def sortCustomObjects(a: List[CustomObject]): List[CustomObject] = {
a.sortBy(_.name).map(co => co.copy(children = sortCustomObjects(co.children)))
}