August 26, 2024

P07 - Flatten a nested list structure.

Example:

> flatten(listOf(listOf(1, 1), 2, listOf(3, listOf(5, 8))))
[1, 1, 2, 3, 5, 8]

kotlin

package org.kotlin99.lists

import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test

@Suppress("UNCHECKED_CAST")
fun flatten(list: List<Any>): List<Any> =
    list.flatMap {
        if (it is List<*>) flatten(it as List<Any>) else listOf(it)
    }

class P07Test {
    @Test fun `flatten a nested list structure`() {
        assertThat(flatten(listOf(1)), equalTo(listOf<Any>(1)))
        assertThat(flatten(listOf(1, listOf(2))), equalTo(listOf<Any>(1, 2)))
        assertThat(
            flatten(listOf(listOf(1, 1), 2, listOf(3, listOf(5, 8)))),
            equalTo(listOf<Any>(1, 1, 2, 3, 5, 8))
        )
    }
}
Be first to comment
Leave a reply