代码之家  ›  专栏  ›  技术社区  ›  Jan B. HDR

Kotlin中的缩短过滤器和映射

  •  0
  • Jan B. HDR  · 技术社区  · 7 年前

    Transformation 包含用户的对象我需要非空用户的非空ID。有没有办法缩短这个表达式?

    val list: List<Transformation> = ...
    list.filter {t -> t.user!!.id !== null }.map { t -> t.user!!.id!! }
    
    2 回复  |  直到 7 年前
        1
  •  9
  •   s1m0nw1    7 年前

    mapNotNull :

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

    null 列表中的用户以及 无效的

    请注意 !! 在这种情况下是不正确的。它会导致 NullPointerException 无效的 https://kotlinlang.org/docs/reference/null-safety.html

        2
  •  2
  •   Frank Neblung    7 年前

    从您的示例代码中,不清楚列表中有什么。它不是一个用户列表,而是一个包含用户的列表。

    鉴于此

    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 }