java - 如何通过 id 组合两个对象列表并在 kotlin 中选择非空值

标签 java android list kotlin merge

我想合并两个对象列表。每个对象都有一个特定的 ID。如果两个列表中存在相同的对象,我想合并它们。如果一个值为空,我想得到非空值。例如:

val list1 = listOf(
    Object(id = 1, hello, 100),
    Object(id = 2, null, 40)
)

val list2 = listOf(
    Object(id = 1, null, 100),
    Object(id = 2, test, 40),
    Object(id = 3, hi, 13)
)

我要实现的结果如下:

val result = listOf(
    Object(id = 1, hello, 100),
    Object(id = 2, test, 40),
    Object(id = 3, hi, 13)
)

注意:如果一个值不为空,我知道它没有什么不同。

最佳答案

fun main() {
    val list1 = listOf(
        Obj(id = 1, "hello", 100),
        Obj(id = 2, null, 40)
    )

    val list2 = listOf(
        Obj(id = 1, null, 100),
        Obj(id = 2, "test", 40),
        Obj(id = 3, "hi", 13)
    )

    val result = (list1.asSequence() + list2)
        .groupingBy { it.id }
        .reduce { _, accumulator: Obj, element: Obj ->
            accumulator.copy(second = accumulator.second ?: element.second)
        }
        .values.toList()

    println(result)
}

data class Obj(val id: Int, val second: String?, val third: Int)

关于java - 如何通过 id 组合两个对象列表并在 kotlin 中选择非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64232688/

相关文章:

android - 如何检测墙壁的长边以准备 mask 和重新着色

iphone - Android/iOS API 访问蓝牙心率监视器

java - AndroidHttpClient线程安全吗

Python - 将列表中的项目设置为字典值列表

Python:从列表创建数据框,其中每个新行都从特定的列表索引开始

java - CORS 工作的 GWT HTTP 请求响应代码 0

java - 当我使用 g.drawString 时,java 中出现白屏

java - Apache POI JDK版本

java - 如何获得 Double.toString() 行为和千位分隔符?

list - 使用流的 SML 惰性排序 int 列表