gpt4 book ai didi

java - 将 ArrayList 元素移动到列表中的最后一个位置?

转载 作者:行者123 更新时间:2023-11-30 06:08:25 27 4
gpt4 key购买 nike

在下面的方法中,我有一个 StringsArrayList

我检查这些字符串中是否有任何一个在 txt 文件中(checkIfWordIsInTextFile 方法)。

如果一个字符串在这个列表中,我想把它放在列表的最后,然后返回重新排序的列表。

我正在尝试使用 set 方法,但我不确定如何将字符串设置为列表中的最后一个元素

当前方法:

 public List<String> placeParentsLastInLineItemList(List<String> listToReorder){

for(String string: listToReorder){

if(checkIfWordIsInTextFile(string)==true){
listToReorder.set(,string); //how to set the string to the last element in list?
}

return listToReorder;
}

最佳答案

最简单的解决方案(适合初学者)

ArrayListList默认 add()根据定义的行为,添加到列表的末尾。所以:-

listToReorder.add(string)

虽然你需要将它从原来的位置移除,所以不要使用 for-each 循环,使用索引,然后当你找到它时:-

listToReorder.remove(i);

...在将其重新添加到末尾之前,所以:-

for (int i=0; i<listToReorder.size(); i++){
String item = listToReorder.get(i);

//NOTE: '==true' isn't required if the method returns a boolean
if(checkIfWordIsInTextFile(item)){
//As per @rishi007bansod suggestion: If we remove an item, then the next item will be shifted into this index & effectively skipped. Therefore we want the index not to change this time around so decrement i after usage
listToReorder.remove(i--);
listToReorder.add(item);
}
}

其他选项

  • 根据@Andriy Kryvtsuns 的回答,您可以创建一个新的临时列表并按照您想要的顺序重新创建该列表,但这会使代码变得复杂。另一个问题是你不知道 List 的实现是什么,如果传递了一个 LinkedList,创建一个完整的列表可能效率低下并且 remove() 可以比线性时间运行得更快。

更多高级选项

  • 您可以使用 for-each 循环(如@Ash French),但您需要使用 Iterator,因为 for-each 循环会限制您编辑正在循环的集合

  • 您可以获得所有 Java 8 并使用 lambda ,按照@Mad Matts 优雅的解决方案

关于java - 将 ArrayList 元素移动到列表中的最后一个位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39919276/

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