Подскажите пожалуйста, как в такой структуре данных (упрощенной для лучшего понимания) свести всех дочерних элементов сущности в один список:
fun main() {
val listOfEntities = listOf(
Entity(
name = "John",
entities = listOf(
Entity(
name = "Adam",
entities = listOf()
),
Entity(
name = "Ivan",
entities = listOf(
Entity(
name = "Henry",
entities = listOf(
Entity(
name = "Kate",
entities = listOf(
Entity(
name = "Bob",
entities = listOf()
)
)
)
)
)
)
)
)
)
)
val result = listOfEntities.flatMap { it.entities }.map { it.name }
println(result)
}
data class Entity(
val name: String,
val entities: List<Entity>
)
Я ожидаю увидеть следующий результат:
[John, Adam, Ivan, Henry, Kate, Bob]
Пытаюсь использовать flatMap, но это не привело к ожидаемому результату.
Заранее спасибо!





Вы можете рекурсивно перемещаться по дереву сущностей следующим образом:
fun List<Entity>.flattenEntities(): List<Entity> =
this + flatMap { it.entities.flattenEntities() }
Тогда вы можете вызвать
val result = listOfEntities.flattenEntities().map { it.name }
для получения желаемого результата.
Вы могли бы сделать это так
fun List<Entity>.flatten(): List<String> {
return flatMap { listOf(it.name) + it.entities.flatten()}
}
а потом
val result = listOfEntities.flatten()