No se pueden eliminar elementos duplicados de arraylist de hashmap

Estoy buscando los contactos del proveedor de contenido y tengo que mostrarlos en un listview.In el proceso de buscar con éxito los contactos, pero contienen valores duplicados . Ahora Phone.CONTACT_ID es único para cada contacto. Quiero filtrar mi arraylist de contactos Basado en ese campo particular.

Aquí está el código:

try { cursor = getApplicationContext().getContentResolver() .query(Phone.CONTENT_URI, null, null, null, null); int Idx = cursor.getColumnIndex(Phone.CONTACT_ID); int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME); int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER); int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_THUMBNAIL_URI); cursor.moveToFirst(); do { System.out.println("=====>in while"); HashMap<String, String> hashMap = new HashMap<String, String>(); contactid=cursor.getString(Idx); name = cursor.getString(nameIdx); phoneNumber = cursor.getString(phoneNumberIdx); image = cursor.getString(photoIdIdx); System.out.println("Id--->"+contactid+"Name--->"+name); if (!phoneNumber.contains("*")) { hashMap.put("contactid", "" + contactid); hashMap.put("name", "" + name); hashMap.put("phoneNumber", "" + phoneNumber); hashMap.put("image", "" + image); // hashMap.put("email", ""+email); hashMapsArrayList.add(hashMap); } } while (cursor.moveToNext()); } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } 

Aquí puedes ver que estoy buscando 4 campos desde el cursor y enlazándolos con el arraylist hashMapsArrayList que es ArrayList<HashMap<String, String>> hashMapsArrayList=new ArrayList<HashMap<String,String>>(); . Ahora este arraylist contiene campos duplicados y quiero filtrarlo basado en el contactid .

Aquí está el código:

  System.out.println("Original--->"+hashMapsArrayList); for(int i=0;i<hashMapsArrayList.size();i++) { HashMap<String, String> resultp = new HashMap<String, String>(); resultp = hashMapsArrayList.get(i); String contactiddup=resultp.get("contactid"); if(!( hashMapsArrayListRemovedup.contains(contactiddup))) { System.out.println(hashMapsArrayListRemovedup); System.out.println("In if added"); hashMapsArrayListRemovedup.add(resultp); }else{ System.out.println("In else"); } } 

Pero el código anterior no funciona y el nuevo arraylist también contiene valores duplicados.

Por favor ayuda.

Una duplicidad de salida de ejemplo:

 12-15 14:10:57.217: I/System.out(8971): [{name=Didi America, image=null, phoneNumber=, contactid=7996}, {name=Didi America, image=null, phoneNumber=, contactid=7996}] 

Puede, y debe quitar los duplicados cuando construye la lista, en el bucle while. Simplemente use un HashSet para recopilar los identificadores únicos, y sólo agregue entradas que tengan un nuevo identificador en la lista:

  Set<String> ids = new HashSet<>(); do { System.out.println("=====>in while"); contactid=cursor.getString(Idx); if (!ids.contains(contactid)) { ids.add(contactid); HashMap<String, String> hashMap = new HashMap<String, String>(); name = cursor.getString(nameIdx); phoneNumber = cursor.getString(phoneNumberIdx); image = cursor.getString(photoIdIdx); System.out.println("Id--->"+contactid+"Name--->"+name); if (!phoneNumber.contains("*")) { hashMap.put("contactid", "" + contactid); hashMap.put("name", "" + name); hashMap.put("phoneNumber", "" + phoneNumber); hashMap.put("image", "" + image); // hashMap.put("email", ""+email); hashMapsArrayList.add(hashMap); } } } while (cursor.moveToNext()); 

No necesita el segundo fragmento de código (no revisé para ver qué hay de malo en él).

Utilice HashSet para eliminar entradas duplicadas.

P.ej.

 public static HashSet<String> hSet= new HashSet<String>(); 

Agregue valor a HasSet usando hSet.add(yourString);

Para obtener el valor de HashSet tienes que usar Iterator

 Iterator iterator = hSet.iterator(); while(iterator.hasNext()){ String str = iterator.next(); } 

Alternativamente, puede comprobar la frecuencia como eliminar también. Refiérase a este código.puede ayudarle.

 Collections.frequency(arrayList, number) public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList.add(5); arrayList.add(1); arrayList.add(5); arrayList.add(1); arrayList.add(5); arrayList.add(2); arrayList.add(3); ArrayList<Integer> unique = new ArrayList<>(); for (Integer number : arrayList) { if (Collections.frequency(arrayList, number) == 1) { unique.add(number); } } System.out.println(unique); } 
  • Contactos ContentObserver llamado aleatoriamente
  • Android: ¿Cómo importar el contacto desde el teléfono?
  • ¿Error de eliminación o éxito de ContentProviderResult ?
  • ¿Cómo actualizar la empresa de contacto de Android?
  • Recuperar imagen predeterminada del contacto de Android
  • Importar contactos CSV en el teléfono Android 4
  • Obtener contacto Foto basada en Teléfono de contacto Android - Ejemplo de trabajo
  • Android 1.x Contacts.Extensions para un tipo de cuenta personalizada?
  • Menú emergente de Android
  • Uso de LibPhoneNumber google lib en Android
  • Consultar contactos - SOMETIMES devuelve el cursor vacío
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.