Как объединить данные двух разных классов в один в Котлине - PullRequest
0 голосов
/ 14 октября 2018

Я использую 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 des и 2 title в 2 des, так как я могу подойти к этому, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Вы можете использовать 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
World Hello 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 в вашем примере и не являются списками.

0 голосов
/ 14 октября 2018

Если вы просто хотите напечатать значения, вы можете сделать это:

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