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

Android Kotlin如何从包含特定id的列表中返回单个对象?,android,kotlin,Android,Kotlin,你好,我一直在想如何从列表中获取单个对象,我用谷歌搜索过,但所有的主题都显示了如何返回带有排序对象或类似内容的列表 我有一个用户类 class User() { var email: String = "" var firstname: String = "" var lastname: String = "" var password: String = "" var image: String = "" var userId: Str

你好,我一直在想如何从列表中获取单个对象,我用谷歌搜索过,但所有的主题都显示了如何返回带有排序对象或类似内容的
列表

我有一个
用户类

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;
    }
用户getUserById(字符串id){
User=null;
对于(int i=0;i
如何在kotlin中获得相同的结果?

您可以使用,它将为您提供与给定谓词匹配的列表中的第一个元素(或
null
,如果不匹配):

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


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

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

您也可以使用此扩展函数返回对(Boolean,T)

e、 g

val id=2
val item=myList.customContains{it->it.userId==id}
如果(第一项){
item.second//您的对象
//你的代码在这里
}否则{
//如果项目不存在
}
fun List.customContains(函数:(currentItem:E)->Boolean):对{
for(0中的当前值,直到此.size){
if(函数(此[当前]){
返回对(true,此[当前])
}
}
返回对(false,null)
}
简化

val user: User = myList.single { it.userId == id }
或者如果列表中可能没有您的过滤器

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

您也可以使用第一个扩展函数,但若您的搜索项不存在,它会引发异常
val id=2
val item= myList.customContains{it-> it.userId ==id}

if(item.first){
item.second  //your object
//    your code here
}else{
// if item no present
}




fun <E> List<E>.customContains(function: (currentItem: E) -> Boolean): Pair<Boolean, E?> {
        for (current in 0 until this.size) {
            if (function(this[current])) {
                return Pair(true, this[current])
            }
        }
        return Pair(false, null)
    }
val user: User = myList.single { it.userId == id }
val user: User? = myList.singleOrNull{ it.userId == id }