【问题标题】:how to iterate a list like List<Map<String,Object>>如何迭代 List<Map<String,Object>> 之类的列表
【发布时间】:2011-04-26 07:07:33
【问题描述】:

我有一个返回 List&lt;Map&lt;String,Object&gt;&gt; 的方法。

如何遍历 List&lt;Map&lt;String,Object&gt;&gt; 这样的列表?

【问题讨论】:

  • 如果你有选择,尽量避免像这样的过于复杂的嵌套集合数据结构,以支持创建一个新类。如果其他程序员遇到您的 List> 他可能不得不深入研究您的代码以找出它包含的确切内容。通过课程,您可以通过命名和文档来明确您的意图。

标签: java foreach


【解决方案1】:

听起来你正在寻找这样的东西:

List<Map<String, Object>> list; // this is what you have already

for (Map<String, Object> map : list) {
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        String key = entry.getKey();
        Object value = entry.getValue();
    }
}

【讨论】:

    【解决方案2】:
    List<Map<String, Object>> list = getMyMap();    
    for (Map<String, Object> map : list) {
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
    }
    
    1. 遍历地图列表
    2. 处理地图条目

    【讨论】:

    • 你有几个错别字。您分配了两次map,列表中的值应该是Map&lt;String, Object&gt;
    【解决方案3】:

    使用 java 1.8 (8) 你可以像这样重写它:

    list.forEach(item -> 
                    item.forEach((k, v) -> System.out.println(k + ": " + (String)v)
        );
    

    【讨论】:

      【解决方案4】:

      我将向您发布List&lt;Map&lt;String,Object&gt;&gt; 的一个简单示例。

          public static void main(String[] args){
      
          Map<String,Object> map1 = new HashMap<>();
          map1.put("Map1 Key1", (Object) "Map1 value1");
          map1.put("Map1 Key2", (Object) "Map1 value2");
      
          Map<String,Object> map2 = new HashMap<>();
          map2.put("Map2 Key1", (Object) "Map2 value1");
          map2.put("Map2 Key2", (Object) "Map2 value2");
      
          List<Map<String,Object>> list = new ArrayList<>();
          list.add(map1);
          list.add(map2);
      
          list.stream().forEach(mapsData->{
              mapsData.entrySet().forEach(mapData->{
                  System.out.println("Key:"+mapData.getKey()+ " Value:"+mapData.getValue());
              });
          });
      }
      

      【讨论】:

        【解决方案5】:

        这应该可行:

        List<Map<String, Object>> list = ...
        
        for (Map<String, Object> map : list)
        {
             ...
        }
        

        您还可以在 for 循环中使用 iteratorget 方法来访问列表中的元素。

        【讨论】:

          【解决方案6】:
              Map<String, String> map = new HashMap<>();
              map.put("First", "1");
              map.put("Second", "2");
              map.put("third", "3");
              map.put("four", "4");
          
              // here is the logic 
              for (Map.Entry<String, String> entry : map.entrySet()) {
                  System.out.println(entry.getKey() + " - " + entry.getValue());
              }
          

          【讨论】:

          • 问题是关于遍历地图列表,而不仅仅是地图。我会对此投反对票,但这样做你会失去一分。
          • 谢谢兄弟。好建议
          • 不回答问题,投反对票。
          【解决方案7】:

          这是一种迭代地图列表的简单方法,作为我的起点。我的列表里面有一个 Map 对象,里面有 3 个值

          List<Map<String, Object>>
          

          以相当简洁的方式使用 Java 的函数式编程。这里的目的是取出存储在列表中的所有地图并将它们打印出来。我也可以收集价值等。

          answerListOfMaps.stream().map(map -> map.entrySet())
                  .forEach(System.out::println );
          

          Eclipse IDE 控制台中的输出如下所示:

          [isAllowed=true, isValid=true, cardNumber=672xxxxxxxxxxx]
          

          x 用于混淆

          另一种方式:

          answerListOfMaps.stream().flatMap(map -> map.entrySet().stream())
                  .forEach( entry -> System.out.println(entry.getKey() + ":" + entry.getValue()) );
          

          控制台:

          isAllowed:true
          isValid:true
          cardNumber:672xxxxxxxxxxx
          

          【讨论】:

            猜你喜欢
            • 2018-09-22
            • 1970-01-01
            • 1970-01-01
            • 2020-08-01
            • 2016-01-12
            • 1970-01-01
            • 2021-04-29
            • 2020-01-26
            • 1970-01-01
            相关资源
            最近更新 更多