在 ArrayList Freemarker 中迭代 hashmap

Iterate hashmap's in ArrayList Freemarker

我有一个 parent ArrayList 和 2 child HashMap:

List countries = new ArrayList();

Map<String, String> data_dummy = new HashMap<String, String>();
data_dummy.put("name", "abc");
data_dummy.put("surname", "xyz");

Map<String, String> data_dummy2 = new HashMap<String, String>();
data_dummy2.put("name", "def");
data_dummy2.put("surname", "pqr");
countries.add(data_dummy);
countries.add(data_dummy2);

我正在尝试使用语法进行迭代:

 <#list countries as category>
   <#assign keys = countries[category]?keys>
   <#list keys as values>
     ${keys[values]}
  </#list>
</#list>

它不工作,请告诉我如何解决这个问题。 谢谢 阿米特

试试这样的东西:

 <#list countries as category>
    <#assign keys = category?keys>
    <#list keys as key>
         ${category.get(key)}
    </#list>
 </#list>

好吧,你搞混了,错过了一些东西,但我看到你在评论中意识到了这一点。但是,另一个(目前接受的)答案不是任何人都应该做的。由于您的密钥是 String-s,您可以只使用 someMap[someKey]。甚至对于非字符串键 someMap.get(someKey) 也只适用于特定的配置设置,强烈建议不要这样做,因为它将真正的 Map 键与方法名称混合在一起。一团糟。 someMap?api.get(someKey) 是当今更好的方法,因为方法名称不必污染键命名空间。 (请注意,由于向后兼容性限制,它仍然需要一些额外的配置;手册对此进行了很好的介绍。)