我需要在Android中旋转ArrayList。我发现的所有解决方案都没有按照我需要的方式工作......
如何将ArrayList旋转到给定位置?我不需要按升序或降序对其进行排序,因为它已经整理好了。我试过这个:
ArrayList<String> myArray = new ArrayList;
myArray.add("A");
myArray.add("A");
myArray.add("B");
myArray.add("B");
myArray.add("B");
myArray.add("C");
myArray.add("C");
myArray.add("D");
myArray.add("D");
myArray.add("D");
//the above will output: A,A,B,B,B,C,C,D,D,D
String rotateTo = "C";
//this gives me random unwanted results...
for (int i = 0; i < myArray.size(); i++) {
String item = myArray.get(i);
if(item.equals(rotateTo)){
Collections.rotate(myArray, i);
break;
}
}
//the output I need: C,C,D,D,D,A,A,B,B,B
可能出现什么问题?
答案 0 :(得分:2)
首先找到rotateTo
字符串的现有索引
int index = myArray.indexOf(rotateTo);
if (index != -1) {
Collections.rotate(myArray, index);
}
答案 1 :(得分:0)
代码中的小变化使其有效
ArrayList<String> myArray = new ArrayList();
myArray.add("A");
myArray.add("A");
myArray.add("B");
myArray.add("B");
myArray.add("B");
myArray.add("C");
myArray.add("C");
myArray.add("D");
myArray.add("D");
myArray.add("D");
//the above will output: A,A,B,B,B,C,C,D,D,D
System.out.println(myArray);
String rotateTo = "C";
int distance = -1;
for (int i = 0; i < myArray.size(); i++) {
String item = myArray.get(i);
if(item.equals(rotateTo)){
distance = i;
break;
}
}
//you can use distance = myArray.indexOf(rotateTo);
//to get index rather than above for loop
//Check Jerry Ans.
if (distance != -1) {
//this gives me random unwanted results...
Collections.rotate(myArray, distance);
}
System.out.println(myArray);
输出 [A,A,B,B,B,C,C,D,D,D] [C,C,D,D,D,A,A,B,B,B]