Java Android-如何根据ArrayList项的值旋转特定组?

Java Android-如何根据ArrayList项的值旋转特定组?,java,android,Java,Android,我需要在Android中旋转一个ArrayList。我找到的所有解决方案都没有按照我需要的方式工作 如何将ArrayList旋转到给定位置?我不需要对它进行升序或降序排序,因为它已经被排序了。我正在尝试这个: ArrayList<String> myArray = new ArrayList; myArray.add("A"); myArray.add("A"); myArray.add("B"); myArray.add("B"); myArray.add("B"); myArr

我需要在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
ArrayList myArray=新建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”);
//以上将输出:A、A、B、B、C、C、D、D、D
字符串旋转到=“C”;
//这给了我随机不想要的结果。。。
对于(int i=0;i

有什么可能是错误的?

代码中的小改动可以让它正常工作

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);
ArrayList 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”);
//以上将输出:A、A、B、B、C、C、D、D、D
System.out.println(myArray);
字符串旋转到=“C”;
整数距离=-1;
对于(int i=0;i
输出 [A,A,B,B,B,C,C,D,D,D] [C,C,D,D,D,A,A,B,B,B]


只需先找到
rotateTo
字符串的现有索引即可

int index = myArray.indexOf(rotateTo);
if (index != -1) {
    Collections.rotate(myArray, index);
}

首先找到字符“C”的距离。那就应用它。@Abhishek我明白你的意思了。。。这就是循环的作用,因为“i”是第一个“C”的距离。问题是旋转方法,它将第一个项目向前移动“i”位置。我需要的是将“I”位置的项目旋转到ArrayList中的第一个位置。请检查答案。杰瑞的回答会消除你的疑虑。否则,复制并粘贴我的答案。虽然@Jerry06 answer也是正确的,但这个答案对我来说是最有效的,因为这样我可以获得myArray中任何对象的属性索引。读者提示:我必须将距离乘以-1才能向后推动旋转,这正是我想要的,因此相应的对象被旋转到数组中的第一个位置。谢谢你的帮助!!