我正在使用kotlin构建这个东西,我使用了两个不同的类
ListTitle.kt
class ListTitle{
var id:Int? = null
var title:String? = null
constructor(id:Int,title:String){
this.id = id
this.title = title
}
}
ListDes.kt
class ListDes{
var address:Int? = null
var des:String? = null
constructor(address:Int,des:String){
this.address = address
this.des = des
}
}
我在列表标题和列表des中添加了一个数组列表
listOfTitle.add(ListTitle(1,"Hello"))
listOfTitle.add(ListTitle(2,"World"))
listDes.add(ListDes(1,"World Des"))
listDes.add(ListDes(2,"Hello Des"))
我想将1个标题中的1个显示为标题,将2个标题中的2个显示为2个标题,所以我该如何处理呢?
答案 0 :(得分:2)
您可以使用zip将两个列表合并为一个以Pairs
作为元素的列表。
val listOfTitle = listOf(ListTitle(1,"Hello"), ListTitle(2,"World"))
val listDes = listOf(ListDes(1,"World Des"), ListDes(2,"Hello Des"))
val pairList = listOfTitle.zip(listDes)
// since an element in the new list is a pair, we can use destructuring declaration
pairList.forEach { (title, des) ->
println("${title.title} ${des.des}")
}
输出:
Hello World Des
世界你好Des
一些注意事项:
您可以在Kotlin中以较短的形式编写课程。只需将属性直接放在主要构造函数的参数列表中,如下所示。
class ListTitle(
var id: Int? = null,
var title: String? = null
)
class ListDes(
var address: Int? = null,
var des: String? = null
)
不要过度使用可空性(例如,使用Int?
而不是Int
)。使属性仅在必要时可为空。如果您始终为指定的属性传递参数,则无需使它们为空。
也许您应该为这些类选择其他名称(其中没有“ List”),因为它们实际上是示例中List
的元素,而不是列出自己。
答案 1 :(得分:0)
如果只想打印值,可以执行以下操作:
listOfTitle.forEach {
val id = it.id
println(it.title + " " + listDes.filter { it.address == id }[0].des)
}
将为每个des
打印匹配的id
:
Hello World Des
World Hello Des
当两个列表的长度相同并且每个des
总是有匹配的id
时,以上代码应该起作用
如果要创建具有匹配对的新列表:
val newList = listOfTitle.map { it ->
val id = it.id
Pair(it.title, listDes.filter { it.address == id }[0].des)
}
newList.forEach { println(it.first + " " + it.second) }