【问题标题】:How to extract list of arraylist of hashmap and loop through it in android?如何提取hashmap的arraylist列表并在android中循环遍历它?
【发布时间】:2015-12-26 10:26:46
【问题描述】:

我有一个 hashmap 的 arraylist 列表,如下所示。您能否帮助我了解如何遍历它以获取密钥并将密钥与特定数据进行比较,如果匹配则显示其各自的值。

List<ArrayList<HashMap>> li = new ArrayList<ArrayList<HashMap>>();
    li = SyncSettings.labelSharedInstance;

下面是 hashmap 存储视图的 arraylist 列表(作为参考,我还添加了 xml)。

<labels>
        <label id="lblMS">
            <text language="EN" value="Morning Sync"/>
            <text language="DE" value="Morgan Sync"/>
        </label>
        <label id="lblES">
            <text language="EN" value="Evening Sync"/>
            <text language="DE" value="Sync Abend"/>
        </label>
        <label id="lblAS">
            <text language="EN" value="Afternoon Sync"/>
            <text language="DE" value="Sync Afternoon"/>
        </label>
    </labels>

最初,我将获取设备语言,我需要使用哈希图中的语言检查设备语言。如果匹配,我需要显示相应的语言。

到目前为止,我所取得的成就如下。

for (ArrayList<HashMap> entry : li) {
        Set<String> keys = entry.keySet();
        for (String key : keys) {
         //I'm just seeing whether i'm doing in a right way or not. So i was just printing.But i was getting nothing 
            System.out.println("key = " + key);
            System.out.println("value = " + value);
        }

请您帮我做进一步的事情。谢谢。

【问题讨论】:

    标签: java android list loops hashmap


    【解决方案1】:

    假设提供了xml,可以创建如下数据结构:

        List<ArrayList<HashMap<String, String>>> listSuper = new ArrayList<>();//List of label in your xml
    
        ArrayList<HashMap<String, String>> listInner = new ArrayList<>();//Correspond to a label in your xml
    
        HashMap<String, String> hashMapLblMs = new HashMap<>();
        hashMapLblMs.put("EN", "Morning Sync");
        hashMapLblMs.put("DE", "Morgan Sync");
        listInner.add(hashMapLblMs);
    
        HashMap<String, String> hashMaplblES = new HashMap<>();
        hashMaplblES.put("EN", "Evening Sync");
        hashMaplblES.put("DE", "Sync Abend");
        listInner.add(hashMaplblES);
    
        listSuper.add(listInner);
    

    现在我们可以使用 for 循环进行迭代:

    for (int i = 0; i < listSuper.size(); i++) {
            ArrayList<HashMap<String, String>> listInner1 = listSuper.get(i);
            for (HashMap<String, String> map : listInner1) {
                for (Map.Entry<String, String> entrySet : map.entrySet()) {
                    System.out.println("key = " + entrySet.getKey());
                    System.out.println("value = " + entrySet.getValue());
                }
            }
        }
    

    【讨论】:

    • @subhash.Hello Subhash,感谢您的回复。根据我的列表,根据我的哈希图,键是 labelId-->lblMS 和 value-->language="EN" value="Morning Sync"。让我说,我从外部传递标签作为参数,如果传递的标签 ID 与键的标签 ID 匹配,我需要获取该值。我怎样才能做到这一点?
    【解决方案2】:
        ArrayList<HashMap<String, String>> arrayList;
        ArrayList<String> lblMSList, lblASList, lblESList;
        arrayList = new ArrayList<HashMap<String, String>>();
    
        lblMSList= new ArrayList<String>();
        lblASList= new ArrayList<String>();
        lblESList= new ArrayList<String>();
    
        arrayList = getAllData();
    
        if (arrayList.size() != 0)
            {
                for (int i = 0; i < arrayList.size(); i++)
                {
                    lblMSList.add(arrayList.get(i).get("lblMS"));
                    lblASList.add(arrayList.get(i).get("lblES"));
                    lblESList.add(arrayList.get(i).get("lblAS"));
                }
            }
    

    希望对你有帮助。

    【讨论】:

    • 非常感谢您回复纪州。我会检查并通知你
    • 你能解释一下你在做什么吗?我没有得到。您正在再次为所有人声明一个列表并添加到它们中。
    • 我已经从 Hashmap 获取数据并将其放入 arraylist,因为我们有多个数据用于同一个键。
    【解决方案3】:
        ArrayList<ArrayList<HashMap<String, String>>> li = new ArrayList<>();
        for (ArrayList<HashMap<String, String>> myList : li) {
            for (HashMap<String, String> myMap : myList) {
                for (String key : myMap.keySet()) {
                    Log.e("key: ", "is " + key);
                    Log.e("value: ", "is " + myMap.get(key));
                }
            }
        }
    

    请试试这个方法!

    【讨论】:

      【解决方案4】:

      检查以下代码:

      List<ArrayList<HashMap<String, String>>> li = new ArrayList<ArrayList<HashMap<String, String>>>();
      
      //Outer loop to get arraylist of list
      for(int i = 0; i < li.size(); i++){
      
      ArrayList<HashMap<String, String>> temp_list=li.get(i);
      
      //inner loop to get hashMap for each entry inside arraylist 
      for (Entry<String, String> mapEntry : temp_list.get(i).entrySet()) {
                          String key = mapEntry.getKey();
                          String value = mapEntry.getValue();
                          // Log.d("LIST:", "" + key + "::" + value);
      
                      }
      
      
      }
      

      【讨论】:

      • 谢谢 S.K.我会检查并通知你
      猜你喜欢
      • 2011-03-27
      • 2010-12-22
      • 1970-01-01
      • 2013-09-04
      • 2015-12-02
      • 2011-10-08
      • 2020-06-15
      • 1970-01-01
      相关资源
      最近更新 更多