Ну, я бы решил эту проблему следующим простым способом:
Я создам один вспомогательный метод:
fun flattenList(nestedList: List<Any?>, flatList: MutableList<Any?>) {
nestedList.forEach { e ->
when (e) {
!is List<Any?> -> flatList.add(e)
else -> flattenList(e, flatList)
}
}
}
И вот как я бы использовал этот метод:
// some sample list
val nestedList = arrayListOf(arrayListOf(arrayListOf(1f, 2f, 3f, 4f)))
// contain the flat list
val flatList = mutableListOf<Any?>()
flattenList(nestedList, flatList)
println("Nested : " + nestedList)
println("Flat : " + flatList)
Вывод:
Nested : [[[1.0, 2.0, 3.0, 4.0]]]
Flat : [1.0, 2.0, 3.0, 4.0]
Вы можете использовать метод flattenList () для любого типа: Другой пример:
val nestedList = listOf(
null,
1f,
listOf(2.0),
listOf(listOf(3.0, 4), 5.0),
listOf(listOf(listOf<String>("Hello Worlds"))),
listOf(listOf(listOf(6), "seven")),
"eight",
listOf<Long>()
)
val flatList = mutableListOf<Any?>()
flattenList(nestedList, flatList)
println("Nested : " + nestedList)
println("Flat : " + flatList)
Выход:
Nested : [null, 1.0, [2.0], [[3.0, 4], 5.0], [[[Hello Worlds]]], [[[6], seven]], eight, []]
Flat : [null, 1.0, 2.0, 3.0, 4, 5.0, Hello Worlds, 6, seven, eight]