【问题标题】:kotlin - Is there a way to merge two lists?kotlin - 有没有办法合并两个列表?
【发布时间】:2021-07-31 14:33:57
【问题描述】:
val current = listOf(
    Item(0, "url_0", "content_0"),
    Item(1, "url_1", "content_1"),
    Item(2, "url_2", "content_2"),
    Item(3, "url_3", "content_3"),
    Item(4, "url_4", "content_4"),
    Item(5, "url_5", "content_5")
)

val contentModify = listOf(
    Item(0, "url_0", "content_0"),
    Item(1, "url_1", "content_1"),
    Item(2, "url_2", "content_20"), // modify
    Item(3, "url_3", "content_30"), // modify
    Item(4, "url_4", "content_40"), // modify
    Item(5, "url_5", "content_5")
)

val urlModify = listOf(
    Item(0, "url_0", "content_0"),
    Item(1, "url_1", "content_1"),
    Item(2, "url_2", "content_2"),
    Item(3, "url_3", "content_3"),
    Item(4, "url_40", "content_4"), // modify
    Item(5, "url_50", "content_5") // modify
)

val content = current.filterNot(contentModify::contains)
val url = current.filterNot(urlModify::contains)

我 [content], [url] 通过比较 [contentModify] 和 [urlModify] 在不同地方修改的 [current] 来找到更改点。 我想将这两个结果结合起来做一个编辑列表,但是我想知道如果Id值相同,是否有办法将它们合并。 有没有办法在kotlin中结合这两个结果??

【问题讨论】:

  • 我的一个朋友在 Kotlin 上有一个针对初学者的博客。查看typealias.com他涵盖了这样的内容

标签: list kotlin merge


【解决方案1】:

我不明白最终列表应该包含哪些元素...

如果您想要所有已更改项目的列表(但使用旧值),简单的方法是使用集合:(url + content).toSet() 此指令生成一个包含以下项目的集合:

  • 项目(2,“url_2”,“content_2”)
  • 项目(3,“url_3”,“content_3”)
  • 项目(4,“url_4”,“content_4”)
  • 项目(5,“url_5”,“content_5”)

但是这个列表不包含更新的数据,所以我想你想要下面的列表:

  • 项目(2,“url_2”,“content_20”)
  • 项目(3,“url_3”,“content_30”)
  • 项目(4,“url_40”,“content_40”)
  • 项目(5,“url_50”,“content_5”)

为此,没有任何内置函数,因此您应该实现以下内容:

// your version of content and url are sublists of current but 
// you need the updated items (from contentModify and urlModify)
val content = contentModify.filterNot(current::contains)
val url = urlModify.filterNot(current::contains)

val mergedList = (content + url)
        .groupBy{it.id}
        .values
        .flatMap{ items -> 
            sequenceOf(if(items.size == 2){Item(items[0].id, items[0].content, items[1].url)} else {items.first()})
        }

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 2014-10-13
    • 1970-01-01
    • 2016-08-29
    • 2021-10-12
    • 1970-01-01
    • 2013-12-14
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多