Kotlin:将两个不同的列表合并为一个,并从两个列表中选择数据

use*_*005 8 merge android arraylist kotlin

我想合并两个不同类型的列表并创建另一个包含来自两个列表的数据的列表。此外,合并应该只在标识符匹配时发生(如两个列表中的 id 匹配)

Employee(val employeeId: Int,
         val employeeName: String,
         val address: String)

LaptopInfo(val laptopId: Int,
         val employeeId: String,
         val team: String)

EmployeeLaptopInfo(val laptopId: Int,
         val employeeId: String,
         val employeeName: String,
         val address: String)
Run Code Online (Sandbox Code Playgroud)

所以有Employeeand 的列表,LaptopInfo我想添加 EmployeeLaptopInfo 到List<EmployeeLaptopInfo>只有当两个列表中的 employeeId 匹配时

val employeeLaptopInfoList = mutableListOf<EmployeeLaptopInfo>()
val employeeIds = employeeList.map { it.employeeId }.toSet()

lapTopInfoList.filter { employeeIds.contains(it.employeeId) }
   .map {
      val employeeLaptopInfo = EmployeeLaptopInfo(it.laptopId, laptopId.employeeId, "can't get info", "can't get info")
      employeeLaptopInfoList.add(employeeLaptopInfo)
   }
Run Code Online (Sandbox Code Playgroud)

但是这样我就不会从两个列表中获得详细信息。有没有办法在不使用 for 循环的情况下以有效的方式做到这一点。

Abh*_*wal 12

我已经优化了Yoni Gibbs 的解决方案。我们的想法是filter笔记本电脑,其中employeeId存在的Employee。然后将每个laptop转换为EmployeeLaptopInfo.

data class Employee(val employeeId: Int, val employeeName: String, val address: String)

data class LaptopInfo(val laptopId: Int, val employeeId: Int, val team: String)

data class EmployeeLaptopInfo(val laptopId: Int, val employeeId: Int, val employeeName: String, val address: String)

fun main(args: Array<String>) {
    val employees = listOf<Employee>()
    val laptops = listOf<LaptopInfo>()

    val employeesById: Map<Int, Employee> = employees.associateBy { it.employeeId }

    val result = laptops.filter { employeesById[it.employeeId] != null }.map { laptop ->
        employeesById[laptop.employeeId]?.let { employee ->
            EmployeeLaptopInfo(laptop.laptopId, laptop.employeeId, employee.employeeName, employee.address)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)