我想根据规则切换列表中元素的位置。
我有一个包含一些数据的地图:
Map<String,List<Person>> workDivision = [:]
//inserted data to map...
我正在循环地图,并根据规则想将列表中的元素移到列表的后面。因此,我首先删除该元素,然后再次插入。
workDivision.each {String division, List<Person> list -> {
if(list.size>1 && someRule = true) {
for(int i = 0; i<list.size; i++) {
Person p = list.get(i)
list.remove(i)
list.add(p)
}
}
}
上面的代码不起作用,我也不知道为什么。有人可以检查我是否缺少某些东西或完全做错了吗?
答案 0 :(得分:1)
您的空结果很可能是由于修改迭代器而不是实际对象的结果存在范围问题。我不十分了解groovy来解决该问题,因此此答案将解决您尝试使用的实际修改算法。
您的循环正在移动多个项目。首先,它删除索引0并将其放回末尾,然后我递增并移动索引1。索引1中的内容不是列表中的下一项,因为您只是移动了它。
示例列表A,B,C,D,E
i=0 A is removed and added -> B, C, D, E, A
i=1 C is removed and added -> B, D, E, A, C
i=2 E is removed and added -> B, D, A, C, E
i=3 C is removed and added -> B, D, A, E, C
i=4 C is removed and added again -> B, D, A, E, C
i=5 loop ends