``` val foo1: String? val foo2: String? mapOf( ...
# getting-started
u
Copy code
val foo1: String?
val foo2: String?

mapOf(
   // if (foo1 != null) foo1 to 1 else ???
   // if (foo2 != null) foo2 to 2 else ???
)
d
mapOf(foo1 to 1, foo2 to 2).filterKeys { it != null }.mapKeys { it!! }
could do.
c
Copy code
mutableMapOf().apply {
    if (foo1 != null) put(foo1, 1)
    // ...
}
w
Maybe something like this?
Copy code
@Test
    fun asas1() {
        val foo1: String? = null
        val foo2: String? = "foo2"
        val foo3: String? = null
        val foo4: String? = "foo4"

        val result: Map<String, Int> =
            setOf(foo1, foo2, foo3, foo4)
                .filterNotNull()
                .mapIndexed { index, value -> value to index }
                .toMap()
        println(result) //{foo2=0, foo4=1}
    }

    @Test
    fun asas2() {
        val foo1: String? = null
        val foo2: String? = "foo2"
        val foo3: String? = null
        val foo4: String? = "foo4"

        val result: Map<String, Int> =
            setOf(foo1, foo2, foo3, foo4)
                .mapIndexedNotNull { index, value -> value?.let { it to index } }
                .toMap()
        println(result) //{foo2=1, foo4=2}
    }
Two behaviours depending of what index you want to keep