viernes, 30 de abril de 2010

Java: detect duplicates in ArrayList or List

Detectar duplicados en un ArrayList o List (Java) usando Map, HashMap:
public class TestDmottaB {

    public static void main(String[] args){        
     validarValoresDuplicadosLista();
        System.out.println("Ejemplo Finalizado.");
    }

    public static void validarValoresDuplicadosLista() {
  ArrayList al = new ArrayList();
  al.add("1");
  al.add("2");
  al.add("5");
  al.add("6");
  al.add("3");
  al.add("4");
  al.add("4");
  al.add("6");
  al.add("8");
  al.add("9");
  System.out.println("Lista Original: " + al); 
  
  //Logica para detectar valores duplicados en una lista
  Map map = new HashMap();
  List duplicados = new ArrayList();
  Iterator iter = al.iterator();    
  int i=0;
        while (iter.hasNext()) {
         String valor=(String)iter.next();         
         if(map.containsKey(valor)){
          duplicados.add("Key "+valor+" de la fila "+i+" ya esta registrado");
         }else{
          map.put(valor,""+i);
         }         
         i++;
        }
  //Recorrer la lista de los valores no duplicados
        Set set = map.entrySet();  
  Iterator ite = set.iterator();
        while (ite.hasNext()) {
         Map.Entry entry = (Map.Entry) ite.next();                              
         System.out.println("Key: "+entry.getKey()+" Fila: "+entry.getValue());
        }        
        //Los valores que se duplicaron
        System.out.println("Duplicados " + duplicados);  
 }
}

Resultado del ejemplo:

Lista Original: [1, 2, 5, 6, 3, 4, 4, 6, 8, 9]
Key: 3 Fila: 4
Key: 5 Fila: 2
Key: 2 Fila: 1
Key: 9 Fila: 9
Key: 4 Fila: 5
Key: 8 Fila: 8
Key: 6 Fila: 3
Key: 1 Fila: 0
Duplicados [Key 4 de la fila 6 ya esta registrado, Key 6 de la fila 7 ya esta registrado]
Ejemplo Finalizado.