gpt4 book ai didi

kotlin - 有没有办法合并来自 Kotlin 列表中不同(但相似)对象的值?

转载 作者:行者123 更新时间:2023-12-04 07:43:48 30 4
gpt4 key购买 nike

好的,我有一个 list<SomeObject>

class SomeObject(
val number: Int,
val otherNumber: Int,
val list<OtherObject>
)
列表中的对象可以具有相同的 numberotherNumber但它们的 list<OtherObject> 中的值不同
我想用相同的 number 合并列表中的每个对象和 otherNumber .例如,如果我有一个 list<SomeObject>有 3 个条目:
1 = SomeObject(1, 1, list<OtherObject>2 = SomeObject(1, 1, list<OtherObject>3 = SomeObject(1, 2, list<OtherObject>我希望条目 1 和 2 成为一个列表条目,两个列表的值相结合。
我可以用很多循环和东西来做到这一点,但是列表超长,我似乎无法以有效的方式做到这一点。
是否有一些 kotlin 功能?或者有人对我应该如何处理它有很好的建议吗?

最佳答案

也许这对您来说是一个合适的解决方案。而不是 List<OtherObject>我用了 List<String>但这应该没什么区别。
您可能需要考虑包装您的 List<SomeObject>Sequence建立一个一次性执行的过滤器,而不是实际应用 groupBy等等到 List .另请引用 https://kotlinlang.org/docs/sequences.html
有关解释,请检查代码中的注释。

fun main() {
val objects = listOf(
SomeObject(1, 1, listOf("a")),
SomeObject(1, 1, listOf("b")),
SomeObject(1, 2, listOf("c")))


// group all objects by number and othernumber (both have to match)
val grouping = objects.groupBy { Pair(it.number, it.otherNumber) }

// consolidate a grouping onto a new object, so
// [Pair(1,1), List(SomeObject(1,1,["a","b"]), SomeObject(1,1,["c","d"])) ]
// [Pair(2,1), List(SomeObject(2,1,["e","f"]), SomeObject(2,1,["g","h"])) ]
// becomes
// List(SomeObject(1,1,["a","b", "c", "d"]), SomeObject(2,1,["e","f", "g", "h"]))
val consolidated = grouping.values.map {
objectsWithSameNumber ->
SomeObject(objectsWithSameNumber[0].number,
objectsWithSameNumber[0].otherNumber,
objectsWithSameNumber.flatMap { it.list })
}

/*
1 1: [a, b]
1 2: [c]
*/
for (result in consolidated) {
println(result)
}
}

class SomeObject(
val number: Int,
val otherNumber: Int,
val list: List<String>
){
override fun toString(): String {
return "$number $otherNumber: $list"
}
}

关于kotlin - 有没有办法合并来自 Kotlin 列表中不同(但相似)对象的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67300942/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com