如何在Kotlin中将两个不同的类数据合并为一个

时间:2018-10-14 15:34:05

标签: android android-studio kotlin kotlin-android-extensions

我正在使用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个标题,所以我该如何处理呢?

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) }