2012-07-10 41 views
6

Tengo un ArrayList de HashMap. Quiero buscar un HashMap pero no puedo encontrar la manera de lograrlo. Por favor sugiérame cómo se puede hacer? Gracias.Buscar un HashMap en un ArrayList de HashMap

+0

¿Reviso todos los 'HashMap's en' ArrayList' y reviso uno después del otro para ver la clave? –

+0

¿Desea buscar un solo mapa en una lista de mapas? ¿Cómo reconocerías ese mapa único que tienes que buscar? – eran

+0

¿Guardarlo en una base de datos y buscarlo con SQL? Indíquelo con Lucene y busque el texto completo? ¿Transformar en un árbol rojo-negro indexado en reversa? Basado en lo que dijiste, quién sabe ... –

Respuesta

5

respuesta a tu pregunta de la manera que lo entendí!

for (HashMap<String, String> hashMap : yourArrayList) 
    { 
     // For each hashmap, iterate over it 
     for (Map.Entry<String, String> entry : hashMap.entrySet()) 
     { 
      // Do something with your entrySet, for example get the key. 
      String sListName = entry.getKey(); 
     } 
    } 

Su Hashmap podría usar otros tipos, este utiliza Cuerdas.

+0

No tiene sentido repetir la lista completa de encontrar la clave en medio de la lista. –

3

ver si esto ayuda:

@Test 
public void searchMap() { 
    List<Map<String, String>> listOfMaps = new ArrayList<Map<String,String>>(); 
    Map<String, String> map1 = new HashMap<String, String>(); 
    map1.put("key1", "value1"); 
    Map<String, String> map2 = new HashMap<String, String>(); 
    map1.put("key2", "value2"); 
    Map<String, String> map3 = new HashMap<String, String>(); 
    map1.put("key3", "value3"); 
    listOfMaps.add(map1); 
    listOfMaps.add(map2); 
    listOfMaps.add(map3); 

    String keyToSearch = "key2"; 
    for (Map<String, String> map : listOfMaps) { 
     for (String key : map.keySet()) { 
      if (keyToSearch.equals(key)) { 
       System.out.println("Found : " + key + "/value : " + map.get(key)); 
      } 
     } 
    } 
} 

Salud!

2
Object myObj; 
Object myKey; 
//Traverse the list 
for(HashMap curMap : listOfMaps){ 
    //If this map has the object, that is the key doesn't return a null object 
    if((myObj = curMap.get(myKey)) != null) { 
     //Stop traversing because we are done 
     break; 
    } 
} 
//Act on the object 
if(myObj != null) { 
    //TODO: Do your logic here 
} 

Si usted está buscando para obtener la referencia al mapa del lugar del objeto (por cualquier razón) se aplica un mismo proceso, excepto que acaba de almacenar la referencia al mapa:

Map myMap; 
Object myKey; 
//Traverse the list 
for(HashMap curMap : listOfMaps){ 
    //If this map has the object, that is the key doesn't return a null object 
    if(curMap.get(myKey) != null) { 
     //Store instance to the map 
     myMap = curMap; 
     //Stop traversing because we are done 
     break; 
    } 
} 
//Act on the map 
if(myMap != null) { 
    //TODO: Do your logic here 
} 
1

La manera eficiente que he usado para buscar un hashmap en un arraylist sin usar loops. Dado que el ciclo hace que el tiempo de ejecución sea más largo

try{ 
int index = list.indexOf(map); // map is your map to find in ArrayList 
if(index>=0){ 
HashMap<String, String> map = array_list.get(index); 
// Here you can get your values 
} 
} 
catch(Exception e){ 
e.printStackTrace(); 
Log.i("HashMap","Not Found"); 
} 
1

Pruebe a continuación el código mejorado para buscar la clave en una lista de HashMap.

public static boolean searchInMap(String keyToSearch) 
{ 
    boolean returnVal = false; 
    List<Map<String, String>> listOfMaps = new ArrayList<Map<String, String>>(); 

    Map<String, String> map1 = new HashMap<String, String>(); 
    map1.put("key1", "value1"); 

    Map<String, String> map2 = new HashMap<String, String>(); 
    map1.put("key2", "value2"); 

    Map<String, String> map3 = new HashMap<String, String>(); 
    map1.put("key3", "value3"); 

    listOfMaps.add(map1); 
    listOfMaps.add(map2); 
    listOfMaps.add(map3); 

    for (Map<String, String> map : listOfMaps) 
    { 
     if(map.containsKey(keyToSearch)) 
     { 
      returnVal =true; 
       break; 
     } 

    } 
    return returnVal; 

} 
+0

Pase las teclas como un argumento que debe buscarse. –

0

si tiene un ArrayList como éste: ArrayList < HashMap < String, String > > y desea comparar uno de los valores dentro de la HashMap probar este código.

Lo uso para comparar la configuración de mis notificaciones de alarma.

for (HashMap<String, String> map : AlarmList) { 
    for (String key : map.keySet()) 
    { 
     if (key.equals("SendungsID")) 
     { 
     if(map.get(key).equals(alarmMap.get("AlarmID"))) 
     { 
       //found this value in ArrayList 
     } 
     } 
    } 
}