2012-07-10 13 views
6

Mam ArrayList of HashMap. Chcę wyszukać w nim HashMap, ale nie mogę znaleźć sposobu, aby to osiągnąć. Proszę zasugerować mi, jak można to zrobić? Dzięki.Wyszukaj HashMap w ArrayList of HashMap

+0

Powtórzyć wszystkie 'HashMap's w' ArrayList' i sprawdzić jeden po drugim dla klucza? –

+0

Czy chcesz przeszukać pojedynczą mapę na liście map? Jak rozpoznałbyś tę pojedynczą mapę, którą musisz przeszukać? – eran

+0

Zapisać go w bazie danych i przeszukać za pomocą SQL? Zindeksuj go za pomocą Lucene i wyszukaj pełny tekst? Przekształcić się w indeksowane odwrotnie czerwono-czarne drzewo? Na podstawie tego, co powiedziałeś, kto wie ... –

Odpowiedz

5

odpowiedź na twoje pytanie tak, jak to zrozumiałem!

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(); 
     } 
    } 

Twoja Hashmap może używać innych typów, ta używa Ciągów.

+0

Nie ma sensu powtarzać całej listy, aby znaleźć klucz na środku listy. –

3

Zobacz, czy to pomaga:

@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)); 
      } 
     } 
    } 
} 

Cheers!

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 
} 

Jeśli szukasz, aby uzyskać odniesienie do mapy zamiast obiektu (z jakiegokolwiek powodu) stosuje ten sam proces, z wyjątkiem po prostu przechowywać odniesienie do mapy:

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

Efektywny sposób, którego użyłem do przeszukania mapy mieszającej na liście bez użycia pętli. Ponieważ pętla sprawia, że ​​czas wykonania jest dłuższy,

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

Spróbuj poniżej ulepszonego kodu do wyszukiwania klucza na liście 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

Przekaż klucze jako argument, który należy przeszukać. –

0

jeśli masz ArrayList jak ten: ArrayList < < HashMap String, String > > i chcesz porównać jedną z wartości wewnątrz HashMap spróbuj tego kodu.

Używam go do porównywania ustawień powiadomień o alarmach.

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 
     } 
     } 
    } 
}