Существует ли функция высокого порядка для kotlin для получения общих данных из двух разных типов списков? - PullRequest
0 голосов
/ 07 ноября 2019

У меня та же проблема, что и описанная в этой ссылке (но она указана быстро) Получение общих данных из двух разных типов массивов

Я пробовал:

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Редактировать: Основываясь на комментариях ниже, вот способ сделать это без повторения с предикатом дважды:

val map = list.mapNotNull{el -> 
        list1.firstOrNull{el1 -> el.name == el1.name}?.let{el1 -> el.id to el1.id}
    }.toMap()
0 голосов
/ 07 ноября 2019

Вы можете использовать intersect для извлечения общих элементов из двух списков:

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

Все, что вам нужно сделать, это определить равенство между двумя элементами:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...