Как обработать нулевой возврат из функции поиска Котлина? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть список объектов, например:

val companies = listOf(
        Company(id = "1", name = "IBM"), 
        Company(id = "2", name = "Apple"))

Далее я хочу найти объект из этого списка по условию name и получить значение поля id поляобъект найденИтак, я использую find вызов функции в списке:

val companyId = companies.find { it.name == "IBM" }.id

Но этот не компилируется с На приемнике с нулевым разрешением разрешены только безопасные вызовы или вызовы без вызова . Итак, как мне справиться с возможным null возвратом от find? Я пытался с помощью оператора Элвиса возвратить пустую строку иначе, как:

val companyId = companies.find { it.name == "IBM" }.id ?: ""

Но это все равно не компилируется.

1 Ответ

1 голос
/ 01 ноября 2019

Измените его на (потому что он не может получить id от нулевого объекта, пока вы снова не обработаете его как обнуляемый (String?)):

val companyId = companies.find { it.name == "IBM" }?.id ?: ""

Если вы уверены, что естьКомпания с именем "IBM" вы можете использовать !! (не рекомендуется):

val companyId = companies.find { it.name == "IBM" }!!.id

далее больше

...