【问题标题】:How to iterate over map using mustache in java如何在java中使用胡子迭代地图
【发布时间】:2014-10-19 15:44:55
【问题描述】:

我是 mustache 的新手,想知道如何在给定 Map 的情况下使用 mustache 迭代 HashMap

Map mapA = new HashMap();

mapA.put("key1", "element 1");
mapA.put("key2", "element 2");
mapA.put("key3", "element 3");

地图键名各不相同。理想情况下,我希望 mustache 遍历它的键和值。所以在java中它看起来像这样:

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

那么有人可以告诉我如何在小胡子中实现上述目标。我的意思是模板的外观如何?我试过这个模板,但到目前为止没有运气:(

{{#mapA}}
  <li>{{key}}</li>
  <li>{{value}}</li>
{{/mapA>

所以当我运行这个模板时,&lt;li&gt; 标签的输出是空的,为什么? 谢谢。

【问题讨论】:

  • 我认为最接近的方法是将您的条目集对象包装在 List 中并检索它
  • 模板中还有语法错误。最后一行应该是{{/mapA}} 而不是{{/mapA&gt;

标签: java mustache


【解决方案1】:

我不知道 mustache,但根据我看到的一些代码示例,我认为您应该像这样在 Java 代码中定义一个 entrySet 变量

Set<Map.Entry<String,Object>> entrySet = mapA.entrySet();

并在你的 mustache 代码中使用它而不是 mapA

{{#entrySet}}
  <li>{{key}}</li>
  <li>{{value}}</li>
{{/entrySet}}

【讨论】:

  • 这真的有效吗?我试过了,还是不行
  • 当时我的答案基于代码示例和文档。 OP 接受了答案,所以我认为它对他有用。
  • 它确实对我有用,但我必须配置 MustacheFactory 以允许自省 java.util.Map 中的方法。我正在使用来自这里的 mustache 库的 java 版本:github.com/spullara/mustache.java
  • 我明白了,这是对答案的有用补充:)
  • @Dhiraj 你能分享一下你是怎么做到的吗?我看不到如何在 MustacheFactory 上配置自省。
【解决方案2】:

比这简单得多,只要这样做:

{{#mapA}}
  {{#entrySet}}
    <li>{{key}}</li>
    <li>{{value}}</li>
  {{/entrySet}}
{{/mapA}}

【讨论】:

    【解决方案3】:

    正如上面提到的@Dici,您可以使用entrySet。您不必在工厂中使用任何特殊选项,可以直接将其传递给execute。如果您的模板非常简单,您可以在模板中使用顶级地图。

    Java

    Map<String, String> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    
    Writer writer = new OutputStreamWriter(System.out);
    MustacheFactory mustacheFactory = new DefaultMustacheFactory();
    Mustache template = mustacheFactory.compile("map.template");
    template.execute(writer, map.entrySet()).close();
    

    小胡子模板 (map.template)

    {{#.}}
    keylabel:{{key}} : valuelabel:{{value}}
    {{/.}}
    

    结果

    keylabel:key1 : valuelabel:value1
    keylabel:key2 : valuelabel:value2
    

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多