Укоротить фильтр и карту в Котлине - PullRequest
0 голосов
/ 06 ноября 2018

Из списка обнуляемых Transformation объектов, которые содержат пользователя. Я хочу ненулевые идентификаторы ненулевых пользователей. Есть ли способ сократить это выражение?

val list: List<Transformation> = ...
list.filter {t -> t.user!!.id !== null }.map { t -> t.user!!.id!! }

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Из вашего примера кода не понятно, что в списке. Это не список пользователей, а список чего-то, содержащего пользователя.

Учитывая, что

class User(val id: Int)

fun getIds(userList: List<User?>): List<Int> {
    return userList.filterNotNull().map { it.id }
}

или в качестве функции расширения:

fun List<User?>.getIds2() = filterNotNull().map { User::id }
0 голосов
/ 06 ноября 2018

Вы можете использовать mapNotNull:

list.mapNotNull { t -> t.user?.id }

Это отфильтрует всех null пользователей из списка, а также идентификаторы (не ненулевых пользователей), которые null.

Обратите внимание, что использование !! в этом случае неверно. это вызовет NullPointerException s для null s в вашем списке. Посмотрите, как работают операторы обнуляемости в Kotlin: https://kotlinlang.org/docs/reference/null-safety.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...