【问题标题】:Outputting key/value pairs from a List of Maps从映射列表中输出键/值对
【发布时间】:2014-08-13 16:00:14
【问题描述】:

我想从 List > 中输出所有键/值对。我怎样才能做到这一点?

我已经尝试了以下方法:

public void myFunction (List<Map<String,String>> list){
    Iterator <Map<String, String>> iterator = list.iterator();
    while (iterator.hasNext()){
        for (String key: ((Map<String, String>) iterator).keySet()){
            System.out.println(key + " " + ((Map<String, String>) iterator).get(key).toString());
        }
    }
}

但是我得到一个 java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to java.util.Map 异常。

我做错了什么?或者我还能做什么?

【问题讨论】:

    标签: java list map iterator output


    【解决方案1】:

    您没有在迭代器上调用next() 并检索了地图。在您的 while 循环顶部执行一次,然后参考 map 之后:

    Iterator <Map<String, String>> iterator = list.iterator();
    while (iterator.hasNext()){
        Map<String, String> map = iterator.next();
    
        for (String key: map.keySet()){
            System.out.println(key + " " + map.get(key).toString());
        }
    }
    

    注意:考虑使用其他答案之一的代码 - 因为每个循环都更整洁。

    【讨论】:

      【解决方案2】:

      Map#keySet() 返回 Set 而不是 Map,因此返回 ClassCastException

      您可以按照以下方式进行:

      for(Map<String, String> map : list) {
          for(Entry<String, String> e: map.entrySet()) {
              System.out.println("Key=" + e.getKey() + ", Value=" + e.getValue());
          }
      }
      

      请注意,如果您想遍历地图的所有条目,最好使用Map#entrySet 而不是keySet(),并且每次都调用Map#get。你并不总是知道一个类的hashcodeequals 是如何实现的。

      【讨论】:

        【解决方案3】:

        如果我理解您的问题,您可以像这样使用for-each 循环和keySet()

        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        Map<String,String> testMap = new HashMap<String, String>();
        testMap.put("Hello", "World");
        testMap.put("Goodbye", "World");
        
        list.add(testMap);
        for (Map<String, String> map : list) {
            for (String key : map.keySet()) {
                System.out.printf("%s = %s\n", key, map.get(key));
            }
        }
        

        输出是

        Goodbye = World
        Hello = World
        

        【讨论】:

          【解决方案4】:
              List<Map<String,String>> list = null;
          
              for(Map<String,String> m : list){
                  for(Entry<String, String> en : m.entrySet()){
                      System.out.println(en.getKey());
                      System.out.println(en.getValue());
                  }
              }
          

          对于列表中的每个映射,循环遍历其条目集中的每个条目。这样您就不必担心迭代器,因为它是一个简单的 foreach 循环。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-14
            • 2013-11-06
            • 1970-01-01
            • 2016-09-15
            相关资源
            最近更新 更多