首页 > 解决方案 > 如何在 Kotlin 中将两个不同的类数据合并为一个

问题描述

我使用了两个不同的类:

列表标题.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
    }
}

listOfTitle并且listDesArrayLists:

listOfTitle.add(ListTitle(1, "Hello"))
listOfTitle.add(ListTitle(2, "World"))

listDes.add(ListDes(1, "World Des"))
listDes.add(ListDes(2, "Hello Des"))

我想通过/匹配它们title来分配ListTitletodesListDesidaddress为两个列表的每个元素

我该如何处理?

标签: kotlin

解决方案


您可以使用zip将两个列表合并为一个具有Pairsas 元素的列表。

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

输出:

你好世界 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示例中 a 的元素,而不是它们本身。


推荐阅读