ошибка при поиске в массиве Kotlin

есть код:

Spark.get("nextUser"){r,_ ->
    val roomid = r.queryParams("roomid").toInt()
    val room = rooms.find { it.roomid == roomid }!!
    val activeUser = room.users.find { it.userid == room.activeUserID }!!
    var nextUserIndex = room.users.indexOf(activeUser) + 1
    if (nextUserIndex > room.users.size){
        nextUserIndex = 0
    }
    room.activeUserID = room.users[nextUserIndex].userid
}

крашится на этой строке, не могу понять почему:

val activeUser = room.users.find { it.userid == room.activeUserID }!!

Ответы (1 шт):

Автор решения: Sergei Buvaka

Вы не приложили код ошибки. Но думаю, что там банальный NullPointerException.

Почему так происходит? Потому что функция find возвращает nulluble результат, т.е. она может не найти элемент, удовлетворяющий предикат и вернуть null.

В вашем случае rooms.find { it.roomid == roomid } может не иметь объекта с нужным вам id.

Вы используете !! это является плохой практикой. Kotlin вам говорит, что переменная может быть null и вам стоило бы обработать ситуацию с null. Можете использовать стандартный способ Java с проверкой на null через if или использовать оператор "Элвис" Котлина ?:.

Когда вы ставите !! вы явно говорите компилятору: "Я уверен, что тут не будет null", но функция find может вернуть null и по факту вы просто игнорируете потенциальную ошибку.

→ Ссылка