kotlin arraylist 只需要更新一个项目

kotlin arraylist need to update only one item

我试图只更新一个项目,但下面的代码正在更新所有项目

logValue("更改之前:$availabilityMasterList")

                availabilityMasterList.filter { it.days.lowercase() == day.lowercase() }.forEach {
                    it.shifts.add(Shift(shiftname, "", ""))
                }

                logValue("changes broadcast : $availabilityMasterList")

前后的日志输出

更改之前:[MasterAvailableListData(days=Monday, drsAvailabilityDate=, id=0, shifts=[], edit=false), MasterAvailableListData(days=Tuesday, drsAvailabilityDate=, id=1, shifts=[], edit=false), MasterAvailableListData(days=星期三, drsAvailabilityDate=, id=2, shifts=[], edit=false), MasterAvailableListData(days=星期四, drsAvailabilityDate=, id=3, shifts=[], edit=false) ,MasterAvailableListData(天=星期五,drsAvailabilityDate=,id=4,shifts=[],edit=false),MasterAvailableListData(days=星期六,drsAvailabilityDate=,id=5,shifts=[],edit=false),MasterAvailableListData(天=星期天,drsAvailabilityDate=,id=6,班次=[],edit=false)]

---------- below output after above query --------------------

2021-11-23 14:50:04.428 30467-30467/com.ohc.admin D/OhcDocHosp: ---------- 更改广播:[MasterAvailableListData(days=Monday, drsAvailabilityDate=, id=0, shifts=[Shift(shiftname=Afternoon, startTime=, endTime=)], edit=false), MasterAvailableListData(days=Tuesday, drsAvailabilityDate=, id= 1、shifts=[Shift(shiftname=Afternoon, startTime=, endTime=)], edit=false), MasterAvailableListData(days=Wednesday, drsAvailabilityDate=, id=2, shifts=[Shift(shiftname=Afternoon, startTime=, endTime =)], edit=false), MasterAvailableListData(days=Thursday, drsAvailabilityDate=, id=3, shifts=[Shift(shiftname=Afternoon, startTime=, endTime=)], edit=false), MasterAvailableListData(days=星期五, drsAvailabilityDate=, id=4, shifts=[Shift(shiftname=Afternoon, startTime=, endTime=)], edit=false), MasterAvailableListData(days=周六, drsAvailabilityDate=, id=5, shifts=[Shift(shiftname=下午) , startTime=, endTime=)], edit=false), MasterAvailableListData(days=Sunday, drsAvailabilityDate=, id=6, shifts=[Shift(shiftname=Afternoon, startTime=, endTime=)], 编辑=假)]

很奇怪,它 return 只有一个元素,而且整个列表都已更新...

如果您只需要更新一项,请使用 firstOrNull

做类似的事情


 availabilityMasterList.firstOrNull { it.days.equals(day, true) }.?apply {
     shifts.add(Shift(shiftname, "", ""))
  }

firstOrNull will returns that matched value if any, otherwise null

您不需要迭代结果,因为您将获得项目而不是列表。

?.apply

它将防止空指针并仅在列表中存在该项目时才更新该项目。 apply 也将 return 元素,您不需要使用 itthis 引用对象。

顺便说一句,如果你需要不区分大小写的比较,你可以使用 equals 函数和 ignoreCase 参数。 (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/equals.html)

"example".equals("EXAMPLE", ignoreCase = true)

我高度怀疑每个 MasterAvailableListData 项目都对同一个空班次列表具有完全相同的引用。因此,如果您将班次添加到任何项目的班次列表中,它看起来就像您将其添加到所有项目中一样,因为它实际上是同一个列表。确保创建 MasterAvailableListData 项目,每个项目都有自己的初始空班次列表