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