Obtener posiciones antiguas de elementos de ArrayList en Android

Tengo un ArrayList llamado play_viewCount: Estoy ordenando este ArrryList y almacenándolo en un nuevo ArrayList.

Ahora he ordenado ArrayList: pero lo que quiero es antes de ordenar, ¿cuál era la posición de los nuevos elementos en ArrayList?

ArrayList<String> sort_play_viewCount = play_ViewCount; // here play_viewCount is ArrayList
ArrayList<Integer> position_array = new ArrayList<Integer>(); 
System.out.println("......................................... Play Count :"+sort_play_viewCount);
Collections.sort(sort_play_viewCount);
System.out.println(".........................................sort Play Count :"+sort_play_viewCount);

for(int j = 0; j<sort_play_viewCount.size(); j++){
    for(int k = 0; k<sort_play_viewCount.size(); k++){
        if(play_ViewCount.contains(sort_play_viewCount.get(j))){
            position_array.add(k);
        }
    }
}

System.out.println(" .................Position Array: "+position_array);

¿Alguien sabe cómo obtener las posiciones de los nuevos elementos antes de clasificarlos?

preguntado el 22 de mayo de 12 a las 15:05

2 Respuestas

Intenta hacerlo un poco diferente:

ArrayList<Integer> position_array = new ArrayList<Integer>(); 

position_array.addAll(play_viewCount);
Collections.sort(position_array);

Actualmente position_array está ordenado, y para obtener las posiciones anteriores, simplemente puede llamar play_viewCount.indexOf(value);

contestado el 22 de mayo de 12 a las 15:05

Puedes poner los elementos del ArrayList en un Map<String, Integer> (implementado por un HashMap<String, Integer>), donde la clave de una entrada es String elemento del ArrayList y el valor es Integer representando el puesto.

Map<String, Integer> originalPositions = new HashMap<String, Integer>();

String item = ...
String position = ...
originalPositions.put(item, position);

// do something with the ArrayList, such as sorting
Collections.sort(arrayList);

String someItem = arrayList.get(i);
int originalPosition = originalPositions.get(someItem);

Y, por cierto, esta línea de tu fragmento de código no hace lo que crees que hace.:

ArrayList<String> sort_play_viewCount = play_ViewCount;

No crea una nueva ArrayList con el mismo contenido que la original. En su lugar, simplemente crea una nueva referencia al ArrayList original. Ambos play_ViewCount y sort_play_viewCount se refieren al mismo objeto, en otras palabras, cualquier cambio en una de las variables (como la clasificación) también afecta a la otra.

Para crear una nueva copia (sin embargo, todavía es superficial) de un ArrayList, usa el siguiente modismo:

ArrayList<Integer> original = ...
ArrayList<Integer> copy = new ArrayList<Integer>(original);

contestado el 22 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.