2012-07-10 40 views
6

Tôi có một ArrayList của HashMap. Tôi muốn tìm kiếm một HashMap trong nó nhưng không thể tìm thấy một cách để đạt được điều này. Xin cho tôi biết làm thế nào nó có thể được thực hiện? Cảm ơn.Tìm kiếm một HashMap trong một ArrayList của HashMap

+0

Lặp lại tất cả 'HashMap' trong danh sách 'ArrayList' và đánh dấu cái khác cho khóa? –

+0

Bạn có muốn tìm kiếm một bản đồ trong danh sách bản đồ không? Làm thế nào bạn sẽ nhận ra rằng bản đồ duy nhất bạn phải tìm kiếm? – eran

+0

Lưu nó vào cơ sở dữ liệu và tìm kiếm nó bằng SQL? Lập chỉ mục với Lucene và tìm kiếm toàn văn? Chuyển đổi thành cây đỏ-đen được lập chỉ mục ngược lại? Dựa trên những gì bạn nói, ai biết ... –

Trả lời

5

trả lời để câu hỏi của bạn theo cách tôi hiểu nó!

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

Hashmap của bạn có thể sử dụng các loại khác, loại này sử dụng Strings.

+0

Không có nghĩa là lặp lại toàn bộ danh sách bạn tìm thấy chìa khóa ở giữa danh sách. –

3

Xem nếu điều này giúp:

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

Nếu bạn đang tìm kiếm để có được những tài liệu tham khảo để bản đồ thay vì đối tượng (đối với bất cứ lý do) cùng một quá trình áp dụng, trừ trường hợp bạn chỉ cần lưu trữ các tài liệu tham khảo vào bản đồ:

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

Cách hiệu quả mà tôi đã sử dụng để tìm kiếm một hashmap trong danh sách mảng mà không sử dụng vòng lặp. Vì vòng lặp thực hiện thời gian thực hiện dài hơn

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

Hãy thử bên dưới mã được cải thiện để tìm kiếm khóa trong danh sách 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

Truyền các khóa làm đối số cần tìm kiếm. –

0

nếu bạn có một ArrayList như thế này: ArrayList < HashMap < String, String > > và bạn muốn so sánh một trong những giá trị bên trong HashMap thử mã này.

Tôi sử dụng nó để so sánh các cài đặt của thông báo cảnh báo của tôi.

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 
     } 
     } 
    } 
} 
Các vấn đề liên quan