Kotlin如何从包含特定ID的列表中返回单个对象?

时间:2018-06-24 13:56:43

标签: android kotlin

美好的一天,我一直想弄清楚如何从列表中获取单个对象,我做了google,但所有主题都展示了如何返回带有已排序对象或类似对象的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
    }
}

在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;
    }

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

4 个答案:

答案 0 :(得分:9)

您可以使用find进行此操作,这将为您提供与给定谓词(或null,如果没有匹配)相匹配的列表的第一个元素:

val user: User? = myList.find { it.userId == id }

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

val user: User? = myList.last { it.userId == id }

答案 1 :(得分:2)

如果您不想处理空对象,请尝试以下操作:

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

答案 2 :(得分:2)

简化

val user: User = myList.single { it.userId == id }

或者如果列表中没有您的过滤器

val user: User? = myList.singleOrNull{ it.userId == id }

答案 3 :(得分:0)

您还可以使用此扩展功能来返回对Pair(Boolean,T)

例如

blue_thermal_printer