gpt4 book ai didi

list - 使用循环将 map 元素添加到列表

转载 作者:行者123 更新时间:2023-12-05 01:15:24 33 4
gpt4 key购买 nike

我正在尝试使用从查询/findAllBy 中的对象创建的 map 来填充列表...我总是以与循环中最后一张 map 相同的 map 列表结束。

我设置了断点并逐步执行该方法,发现 1) 从查询返回的数据是正确的,2) 当我逐步执行循环时,数据被正确插入到 map 中,3)将 map 插入列表时失败。我用来将元素插入列表的所有方法(.add、.push、<<、list[(i)] = map 等)最终都会覆盖列表中的所有先前元素。

请帮忙。我不知道为什么会这样。希望这对外面的人来说很容易。

def shiftRecords = Shift.findAllByUserAndStartTimeBetween( userInstance, startDate, endDate )
ArrayList allShifts = new ArrayList()
LinkedHashMap thisShift = new LinkedHashMap()
def size = shiftRecords.size()

for ( int i = 0; i < size; i++ ){
thisShift["id"] = shiftRecords[(i)].id
thisShift["user"] = shiftRecords[(i)].user
thisShift["startTime"] = shiftRecords[(i)].startTime
thisShift["posCode"] = shiftRecords[(i)].posCode
thisShift["deptCode"] = shiftRecords[(i)].deptCode
thisShift["billingIDX"] = shiftRecords[(i)].billingIDX

Position thisPos = Position.findByPositionCode( thisShift.posCode )
thisShift["posTitle"] = thisPos.shortTitle
thisShift["deptTitle"] = thisPos.departmentTitle

allShifts.add( (i), thisShift )
}

我需要 allShifts 的结果是一个 map 列表,其中包含从 Shift 查询结果中提取的选定数据。我试过使用 shiftRecords.each 和 eachWithIndex。在将 thisShift 映射插入到 allShifts 的位置,任何类型的循环都会出现此问题。它不只是插入映射的一个实例,而是用当前的 thisShift 映射替换所有列表元素。

最佳答案

def shiftRecords = Shift.findAllByUserAndStartTimeBetween( 
userInstance, startDate, endDate )
ArrayList allShifts = new ArrayList()
def size = shiftRecords.size()

for ( int i = 0; i < size; i++ ){
LinkedHashMap thisShift = new LinkedHashMap()
thisShift["id"] = shiftRecords[(i)].id
thisShift["user"] = shiftRecords[(i)].user
thisShift["startTime"] = shiftRecords[(i)].startTime
thisShift["posCode"] = shiftRecords[(i)].posCode
thisShift["deptCode"] = shiftRecords[(i)].deptCode
thisShift["billingIDX"] = shiftRecords[(i)].billingIDX

Position thisPos = Position.findByPositionCode( thisShift.posCode )
thisShift["posTitle"] = thisPos.shortTitle
thisShift["deptTitle"] = thisPos.departmentTitle

allShifts << thisShift
}

每次迭代 shiftRecords 时都需要创建一个新 map 。虽然,上面的代码可以在 groovy 中过度简化如下:

def shiftRecords = Shift.findAllByUserAndStartTimeBetween( 
userInstance, startDate, endDate )
def allShifts = []

shiftRecords.each{
def thisShift = [:]
thisShift.id = it.id
thisShift.user = it.user
thisShift.startTime = it.startTime
thisShift.posCode = it.posCode
thisShift.deptCode = it.deptCode
thisShift.billingIDX = it.billingIDX

Position thisPos = Position.findByPositionCode( thisShift.posCode )
thisShift.posTitle = thisPos.shortTitle
thisShift.deptTitle = thisPos.departmentTitle

allShifts << thisShift
}

关于list - 使用循环将 map 元素添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18707342/

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