簡體   English   中英

將列表中的元素移動到最后一個索引

[英]Move element in list to last index

我想根據規則切換列表中元素的位置。

我有一張地圖,里面有一些數據:

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)
     }
   }

}

上面的代碼不起作用,我不知道為什么。 有人可以檢查我是否遺漏了什么或完全做錯了嗎?

您的空結果可能是由於修改迭代器的結果而不是您的實際對象的范圍問題。 我不太了解 groovy 來幫助解決這個問題,所以這個答案將解決您嘗試使用的實際修改算法。

您的循環正在移動多個項目。 首先它刪除索引 0 並將其放回末尾,然后 i 遞增並移動索引 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

要將元素放在后面,您需要:

  • 制作一個臨時變量,該變量存儲您要放在列表末尾的值
  • 刪除存儲在臨時變量中的節點,或將其后的所有元素都移到列表中(按1)
  • 最后,將臨時變量的值分配給列表中的最后一個節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM