gpt4 book ai didi

list - 解析和替换 kotlin 中的对象列表

转载 作者:行者123 更新时间:2023-12-02 13:38:41 27 4
gpt4 key购买 nike

我目前有一个定义为的对象列表:

fun updateList(tools: List<Tool>, updateTools: List<Updated>){
... code below
}
Tool数据类定义为:
data class Tool(
var id: String = ""
var description: String = ""
var assignedTo: String = ""
)
Updated数据类定义为:
data class Updated(
var id: String = ""
var assignedTo: String = ""
)

基本上,我解析列表 updateTools如果我找到了 id匹配 tools ,我更新了 assignedTo来自 Tool 的字段从 tools 输入对象来自 updateTools 的一位
fun updateList(tools: List<Tool>, updateTools: List<Updated>){
updateTools.forEach{
val idToSearch = it.id
val nameToReplace = it.name
tools.find(){
if(it.id == idToSearch){it.name=nameToReplace}
}
}
return tools
}

它不起作用,但我不知道如何使它更容易工作。我刚开始使用kotlin,我觉得这不是做它的好方法
任何的想法 ?

谢谢

最佳答案

首先:

  • 你没有分配 assignedTo ,您正在分配 name ...
  • 在传递给 find 的谓词中, 哪一个
  • 应该只返回一个 Boolean过滤元素的值,和
  • 应该不会有任何副作用 ,
  • 这些应该稍后通过调用即 forEach 来完成。 .

  • 此外,数据类的构造函数参数是普通参数,因此它们之间需要逗号!

    您的最后一个代码块,更正后,将是:
    updateTools.forEach {
    val idToSearch = it.id
    val nameToReplace = it.name
    tools.find { it.id == idToSearch }.forEach { it.assignedTo = nameToReplace }
    }
    return tools

    我会这样做(更短):
    updateTools.forEach { u -> tools.filter { it.id == u.id }.forEach { it.assignedTo = u.name } }

    这循环通过每个更新,过滤器 tools用于具有正确 ID 的工具,并设置每个工具的名称。

    我用 forEachfilter返回 List<Tool> .

    如果你能保证 id是独一无二的,你可以这样做:
    updateTools.forEach { u -> tools.find { it.id == u.id }?.assignedTo = u.name }
    firstOrNull返回匹配条件的第一个元素,或 null如果没有。 编辑:看来 findfirstOrNull - 它的实现只是调用 firstOrNull .
    ?.安全调用运算符返回 null如果左操作数是 null ,否则,它调用该方法。

    对于 =和其他返回 Unit 的运算符(即 void ,什么都没有),如果左操作数为空,使用安全调用运算符什么也不做。

    如果我们将它们结合起来,它会有效地设置与此条件匹配的第一个元素的名称。

    关于list - 解析和替换 kotlin 中的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415313/

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