从ArrayList Java中的HashMap键中检索所有值

iro*_*xxx 35 java arraylist hashmap

美好的一天,这让我感到困惑(大脑冻结!),似乎缺少一些东西.有一个我用HashMap填充的ArrayList.现在我把我的HashMap和arraylist放进去.

 Map.put(DATE, value1);
 Map.put(VALUE, value2);

 arraylist.put(Map);
Run Code Online (Sandbox Code Playgroud)

由于我正在解析JSON,因此arraylist的大小会增加.现在我的问题是如何从arraylist中的两个映射键获取值?我试过这个

  if(!list.isEmpty()){   // list is an ArrayList

            for(int k = 0; k < list.size(); k++){
                map = (HashMap)list.get(k);
            }

        }

        Log.d(TAG, "map size is" + map.size());

        String [] keys = new String[map.size()];
        String [] date_value = new String[map.size()];

        String [] value_values = new String[map.size()];

        int i = 0;
        Set entries = map.entrySet();
        Iterator iterator = entries.iterator();

        while(iterator.hasNext()){

            Map.Entry mapping = (Map.Entry)iterator.next();
            keys[i] = mapping.getKey().toString(); 
            date_value[i] = map.get(keys[i]);

            if(keys[i].equals(DATE)){
                date_value[i] = map.get(keys[i]);

            } else if(keys[i].equals(VALUE)){
                value_values[i] = map.get(keys[i]);
            }

                   i++;
                 }
Run Code Online (Sandbox Code Playgroud)

但我似乎无法获得所有的价值观.Map大小始终返回值2,这只是元素.如何从ArrayList中的Map键获取所有值?谢谢

Roh*_*ain 79

当你已经有工作要做的时候,你为什么要重新发明轮子?Map.keySet()method为您提供Map中所有键的Set.

Map<String, Integer> map = new HashMap<String, Integer>();

for (String key: map.keySet()) {
    System.out.println("key : " + key);
    System.out.println("value : " + map.get(key));
}
Run Code Online (Sandbox Code Playgroud)

另外,你的第一个for-loop对我来说很奇怪: -

   for(int k = 0; k < list.size(); k++){
            map = (HashMap)list.get(k);
   }
Run Code Online (Sandbox Code Playgroud)

您正在迭代列表,并将每个元素分配给相同的元素reference - map,这将覆盖所有以前的值.您将拥有的只是列表中的最后一个映射.

编辑: -

entrySet如果您想要地图的键和值,也可以使用.那对你来说是更好的选择: -

    Map<String, Integer> map = new HashMap<String, Integer>();

    for(Entry<String, Integer> entry: map.entrySet()) {
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
    }
Run Code Online (Sandbox Code Playgroud)

PS: -
你的代码看起来很混乱.我建议,把这些代码放在一边,再考虑一下你的代码design.目前,正如代码所代表的那样,很难理解它试图做什么.

  • 如果循环中的代码调用`get`,`entrySet`是迭代map中元素的更好方法 (2认同)

Kum*_*tra 11

试试这种方式......

我正在考虑HashMap类型String,HashMap<String,String>

HashMap<String,String> hmap = new HashMap<String,String>();

hmap.put("key1","Val1");
hmap.put("key2","Val2");

ArrayList<String> arList = new ArrayList<String>();

for(Map.Entry<String,String> map : hmap.entrySet()){

     arList.add(map.getValue());

}
Run Code Online (Sandbox Code Playgroud)


Siv*_*lan 11

列表构造函数接受任何实现Collection接口的数据结构,以用于构建列表

要将所有从哈希映射中获取到列表,请执行以下操作:

Map<String, Integer> map = new HashMap<String, Integer>();
List<String> keys = new ArrayList(map.keySet());
Run Code Online (Sandbox Code Playgroud)

要将所有从哈希映射中获取到列表,请执行以下操作:

Map<String, Integer> map = new HashMap<String, Integer>();
List<Integer> values = new ArrayList(map.values());
Run Code Online (Sandbox Code Playgroud)