Android - 如何按其值旋转特定的ArrayList项目组?

时间:2017-06-27 03:42:22

标签: 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");
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

可能出现什么问题?

2 个答案:

答案 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]