当前位置: 首页 > 知识库问答 >
问题:

更改特定键的值也会更改其他键的值

何飞翰
2023-03-14

这就是我生成dutylist的方法。

val dutyList = ArrayList<Triple<Int, String, ArrayList<Pair<String, String>>>>()

val dateShiftPair = ArrayList<Pair<String, String>>()

dateList.forEach {date ->
     dateShiftPair.add(Pair(date, "E"))
}


staffList.forEach {staff -> 
     dutyList.add(Triple(list.indexOf(staff), staff.name!!, dateShiftPair))
}

这将更改对的第二个值

override fun onShiftChange(pos: Int, datePos: Int, shift: String) {
        val pair = Pair(staffList[pos].third[datePos].first, shift)
        staffListUpdated[pos].third[datePos] = pair
    }

但是它会更改pos中的其他值,也就是说,如果我更改了StaffListUpdated[0].third[0]=pair,它也会更改StaffListUpdated[1].third[0]=pair。我试过很多种方法,但都无济于事。

[
  {
    "first": 0,
    "second": "Ralph",
    "third": [
      {
        "first": "3/5",
        "second": "G" //change should happen here only
      },
      {
        "first": "4/5",
        "second": "E"
      },
      {
        "first": "6/5",
        "second": "E"
      }
    ]
  },
  {
    "first": 1,
    "second": "Mike",
    "third": [
      {
        "first": "3/5",
        "second": "G" //but change happens here as well.
      },
      {
        "first": "4/5",
        "second": "E"
      },
      {
        "first": "5/5",
        "second": "E"
      }
    ]
  }
]

共有1个答案

狄奕
2023-03-14

staffList.forEach {staff -> 
     dutyList.add(Triple(list.indexOf(staff), staff.name!!, dateShiftPair))
}

对每个triple使用相同的列表实例。

这意味着,如果您获得了一个triple的列表,并更改了某些内容,那么您将为每个triple更改该列表。

一个解决方案是在插入或修改时复制列表。

你还需要对列表做一个深度复制。因为如果您创建了列表的浅层副本,实例仍然相同,如果您随后更改了其中一个实例,那么您将为每个三重更改它(再次)。

 类似资料:
  • 好的,所以我不确定这是否可能,但我需要更改一个表中的主键值,以匹配另一个表中的FK值。 我创建了一个表-POS_Transactions(FK REGISTER)并导入了它的值,然后创建了另一个表-Registers(pk Registers key)并导入了它的值。但是当我导入寄存器的值时,我遇到了一些问题,必须清除表并再次尝试多次(这就是为什么数字是从15到22的原因,它只是以这种方式自动更新

  • 问题内容: 我在表中有一条带有错误主键的记录。我想将其更改为正确的值,但该值在许多其他表中使用。 有没有简单的方法可以在同一时间更新主键和外键? 问题答案: 如果将外键设置为级联更改,则值应自动更改。

  • 在这里,是主列键中的第三列。我想要做到这一点的唯一方法是将主复合键更改为。我找不到任何文档告诉我如何做到这一点。有可能吗? 或者,我是否错过了解决这个问题的“正确”方法/我是否曲解了这个问题?

  • 我使用的是ListView,每个列表元素上都有几个按钮。 单击行上的按钮时,该按钮应消失。单击按钮时,单击的按钮会消失,这没关系。问题是其他一些列表元素按钮也不见了。 例如,当我点击第一元素按钮时,它也会影响第六、第十一、第十六元素中的按钮。 原因是适配器没有为数据中的所有元素创建列表元素。它只创建了几个足以在屏幕上显示的对象。如图所示,在列表中向下移动时,top元素成为最后一个元素,其值也发生了

  • 在我试图开发的应用程序中,我有一个布局,带有带按钮的CardView。每个按钮显示相同的布局,但根据每张卡显示不同的数据。我尝试了下面的方法,但不断出现致命的异常。 检查此处的按钮1(特色车间布局) 主要活动。JAVA 登记表。JAVA 我已在注册表格中声明为。java,我想在这里显示详细信息。当从访问它以更改值时,我得到以下异常。 致命异常:主进程:com.example.intodarknes

  • 问题内容: 我正在使用一个返回json的Web服务,并将json存储在本地变量中。json代表一个简单的业务对象,例如: 大小写是这样的,因为按照我们的命名约定,它与.net类的属性名称匹配。 当更改其中一些属性并传递回json时,Web服务现在期望使用驼峰式(再次,按照我们对方法参数的命名约定),而不是最初返回的pascal式。 这当然是行不通的。 我用来将json作为字符串发送回Web服务,并