Kotlin如何从包含特定id的列表中返回SINGLE对象?

Leo*_*rdo 9 android kotlin

美好的一天,我很难搞清楚如何从列表中获取单个对象,我确实谷歌,但所有主题都显示如何返回List带有排序对象或类似的对象.

我有一个 User Class

class User() {

    var email: String = ""
    var firstname:  String = ""
    var lastname: String  = ""
    var password: String  = ""
    var image: String  = ""
    var userId: String  = ""

    constructor(email:String,
                firstname: String,
                lastname: String,
                password: String,
                image: String, userId : String) : this() {
        this.email = email
        this.firstname = firstname
        this.lastname = lastname
        this.password = password
        this.image = image
        this.userId = userId
    }
}
Run Code Online (Sandbox Code Playgroud)

在java中我会写类似的东西

 User getUserById(String id) {
        User user = null;
        for(int i = 0; i < myList.size;i++;) {
            if(id == myList.get(i).getUserId())
            user = myList.get(i)
        }
        return user;
    }
Run Code Online (Sandbox Code Playgroud)

如何在kotlin中获得相同的结果?

zsm*_*b13 29

您可以使用find,它为您提供匹配给定谓词的列表的第一个元素(或者null,如果没有匹配):

val user: User? = myList.find { it.userId == id }
Run Code Online (Sandbox Code Playgroud)

或者,如果您确实需要与谓词匹配的最后一个元素,就像您的Java示例代码那样,您可以使用last:

val user: User? = myList.last { it.userId == id }
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用第一个扩展功能,但是如果您搜索的项目不存在,它可能会引发异常 (2认同)

小智 12

如果你不想处理空对象,试试这个:

val index = myList.indexOfFirst { it.userId == id } // -1 if not found
if (index >= 0) {  
    val user = myList[index]
    // do something with user
}
Run Code Online (Sandbox Code Playgroud)


小智 8

简化

val user: User = myList.single { it.userId == id }
Run Code Online (Sandbox Code Playgroud)

或者如果可能列出没有您的过滤器

val user: User? = myList.singleOrNull{ it.userId == id }
Run Code Online (Sandbox Code Playgroud)