2011-04-22 73 views
6

Tengo una ArrayList que contiene valores duplicados en diff diff index. por ejemplo {"Indian","American","Chinese","Australian","Indian","Russian","Indian"} como u puede ver el valor - "Indian" existe en el índice - 0, 4 & 6.Encontrar índice de valores duplicados en una ArrayList

Necesito conocer todos estos índices donde existe "Indian" y crear una lista de arreglos de eso. Aquí está mi código:

public void filter(){ 


    categoryArray = Arrays.asList(category); 

    for(String k : category){ 
     //Log.v("filter", filterTerm); 
     if(k.equals(filterTerm.toLowerCase())) 
     {    
      int p = categoryArray.indexOf(k);     
      Log.v("index of categArr", ""+p); 
      String id = Integer.toString(p); 
      indexes.add(id); 


     }// end of if 
    }// end of for 

Aquí tengo cuántas veces duplicados se produce al obtener el tamaño de índices (ArrayList) pero cuando puedo comprobar los valores. Es un valor en todo índice ya que en el método: indexOf() siempre trae el índice del primer valor que encuentra en la matriz.

Así que si duplicado existe en el índice - 2, 5, 7 puedo obtener el tamaño de la matriz de índice como 3. Pero los valores son {2,2,2,};

Respuesta

2

Necesita saber en qué índice de la matriz se encuentra actualmente, no el primer índice donde se encuentra. Para no perder de vista que, puesto

int i = 0; 

antes del bucle, y al mismo final del bucle poner

i++; 

Entonces la variable i a donde ha encontrado el valor indica, por lo puede agregar i a la lista de índices.

2

Esta es una situación en la que un bucle basado en índice es más apropiado que el bucle mejorado que está utilizando, ya que lo que necesita tomar es el índice.

Puede basar todo su trabajo en la matriz original en lugar de convertirlo en una lista, y sospecho que estaba buscando una coincidencia que no distinga entre mayúsculas y minúsculas.

public void filter(){ 
    for(int i=0; i<category.length; i++){ 
     if(category[i].equalsIgnoreCase(filterTerm)) 
     {    
      String id = Integer.toString(i); 
      indexes.add(id); 
     } 
    } 
} 

Si usted tiene un ArrayList en lugar de una matriz, por supuesto código similar funcionará, pero utilizando en lugar de list.get(i)category[i].

+0

Sí, esta solución es ligeramente más eficiente, ya que el iterador creado implícitamente por el bucle for original mantendría su propio índice separado. –

+0

¿podría explicar qué es filterTerm en esta respuesta? – Gibs

Cuestiones relacionadas