Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android kotlin是否有从两种不同类型的列表中获取公共数据的高阶函数?_Android_Kotlin_Higher Order Functions - Fatal编程技术网

Android kotlin是否有从两种不同类型的列表中获取公共数据的高阶函数?

Android kotlin是否有从两种不同类型的列表中获取公共数据的高阶函数?,android,kotlin,higher-order-functions,Android,Kotlin,Higher Order Functions,我有与此链接中描述的相同的问题(但在swift中) 我试过: val list=ArrayList<Model>() val list1=ArrayList<Model1>() val hashMap=Hashmap<Int,Int>() for (i in list.indices) { val data = list1.filter { it.name == list[i].name } if (data.isNot

我有与此链接中描述的相同的问题(但在swift中)

我试过:

 val list=ArrayList<Model>()
 val list1=ArrayList<Model1>()
 val hashMap=Hashmap<Int,Int>()
 for (i in list.indices) {
       val data = list1.filter { it.name == list[i].name }
        if (data.isNotEmpty()) {
        hashMap.put(data[0].id,list[i].id)
      }
    }
val list=ArrayList()
val list1=ArrayList()
val hashMap=hashMap()
对于(列表索引中的i){
val data=list1.filter{it.name==list[i].name}
if(data.isNotEmpty()){
hashMap.put(数据[0].id,列表[i].id)
}
}
您可以使用来检索两个列表之间的常用项:

val l1 = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9)
val l2 = listOf<Int>(1, 3, 5, 7, 9)
println(l1.intersect(l2))
val l1=listOf(1,2,3,4,5,6,7,8,9)
val l2=列表(1,3,5,7,9)
println(l1.相交(l2))
您只需定义两项之间的相等性:

class A(val name: String) {
    override operator fun  equals(other: Any?): Boolean {
        if (other is B)
            return this.name == other.anotherFieldForName
        return false
    }
}

class B(val anotherFieldForName: String)


val l1 = listOf<A>(A("Bob"), A("Alice"), A("Margoulin"))
val l2 = listOf<B>(B("Bob"), B("Margoulin"))
println(l1.intersect(l2))
println(l2.intersect(l1))
A类(val名称:字符串){
重写运算符fun equals(其他:任何?):布尔值{
如果(其他为B)
返回this.name==other.anotherFieldForName
返回错误
}
}
B类(val anotherFieldForName:String)
val l1=列表(A(“Bob”)、A(“Alice”)、A(“Margoulin”))
val l2=列表(B(“Bob”)、B(“Margoulin”))
println(l1.相交(l2))
println(l2.相交(l1))

编辑:根据下面的注释,这里有一种不使用谓词迭代两次的方法:

val map = list.mapNotNull{el -> 
        list1.firstOrNull{el1 -> el.name == el1.name}?.let{el1 -> el.id to el1.id}
    }.toMap()

如果两个数组中的对象都是基元类型,这将起作用,但这里我有两个不同的模型,模型中的键数不同。。。对不起。我添加了一个具有两种不同类型列表的示例,但我有两个仅具有主构造函数的数据模型类,并且通过主构造函数初始化键。我应该这样做。