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

2022-08-31 19:43:09

美好的一天,现在这让我感到困惑(大脑冻结!),似乎错过了一些东西。有一个数组列表,我用HashMap填充。现在我把我的HashMap和数组列表。

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

 arraylist.put(Map);

由于我正在解析 JSON,因此数组列表的大小会显著增加。现在我的问题是你如何从数组列表中的两个映射键中获取值?我试过这个

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

但我似乎无法获得所有的值。映射大小始终返回值 2,这只是元素。如何从数组列表中的映射键中获取所有值?谢谢


答案 1

你为什么要重新发明轮子,当你已经有东西可以做你的工作时。 方法为您提供了 Map 中所有键的集合。Map.keySet()

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

另外,你的第一个for循环对我来说看起来很奇怪: -

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

您正在迭代列表,并将每个元素分配给相同的 ,这将覆盖所有以前的值。您将拥有的只是列表中的最后一张地图。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());
    }

P.S.: -
你的代码在我看来很混乱。我建议,把这些代码放在一边,再想一想你的代码。就目前而言,就代码而言,很难理解它试图做什么。design


答案 2

列表构造函数接受实现集合接口以用于生成列表的任何数据结构。

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

Map<String, Integer> map = new HashMap<String, Integer>();
List<String> keys = new ArrayList<>(map.keySet());

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

Map<String, Integer> map = new HashMap<String, Integer>();
List<Integer> values = new ArrayList<>(map.values());