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

标签 android arraylist kotlin merge

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

所以有 Employee 的列表和 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)
   }

但这样我就无法从两个列表中获取详细信息。有没有什么方法可以在不使用 for 循环的情况下以高效的方式做到这一点。

最佳答案

我已经优化了 Yoni Gibbs 的 解决方案。这个想法是过滤 Employee 中存在employeeId 的笔记本电脑。然后将每个 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)
        }
    }
}

关于android - Kotlin:将两个不同的列表合并为一个,并从两个列表中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53633425/

相关文章:

spring-boot - Kotlin 使用 slf4j 进行日志记录的最佳方式

android - 无法在 Unity 中获取 EGL14.eglGetCurrentContext()

java - Android while !c.isAfterLast() loop not being entered

android - Android中不同线程的数据库访问

Java:在列表中查找组合日期

android - 无法从 Android 中的 dataSnapShot 获取数据

java - 使用 apache 通用的 JSON UTC 日期字符串到本地日期字符串

ios - Swift - 确定 Array1 是否至少包含一个来自 Array2 的对象

java - 不使用 Arraylist 创建通用数组

java - 当 Canvas 表面 View 位于另一个 Canvas 之上时,无法将其圆角化