如何在java中使用mustache在地图上迭代
我是一个胡须新手,我想知道如何在如何在java中使用mustache在地图上迭代,java,mustache,Java,Mustache,我是一个胡须新手,我想知道如何在HashMap上迭代使用胡须,因为Map Map mapA = new HashMap(); mapA.put("key1", "element 1"); mapA.put("key2", "element 2"); mapA.put("key3", "element 3"); 映射键名称各不相同。理想情况下,我希望Mustach在其键和值上都进行迭代。因此,在java中,它将如下所示: for (Map.Entry<String, Object>
HashMap
上迭代使用胡须,因为Map
Map mapA = new HashMap();
mapA.put("key1", "element 1");
mapA.put("key2", "element 2");
mapA.put("key3", "element 3");
映射键名称各不相同。理想情况下,我希望Mustach在其键和值上都进行迭代。因此,在java中,它将如下所示:
for (Map.Entry<String, Object> entry : mapA.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
for(Map.Entry:mapA.entrySet()){
String key=entry.getKey();
字符串值=entry.getValue();
// ...
}
所以,有人能告诉我如何实现以上的胡子。我的意思是模板会是什么样子?我尝试了此模板,但到目前为止运气不佳:(
{{#mapA}
{{key}}
{{value}}
{{/mapA>
因此,当我运行此模板时,输出的
标记将显示为空,为什么?
谢谢。我不知道mustache,但根据我看到的一些代码示例,我认为您应该在Java代码中定义一个entrySet
变量,如下所示
Set<Map.Entry<String,Object>> entrySet = mapA.entrySet();
正如上面提到的@Dici,您可以使用
入口集
。您不必在工厂中使用任何特殊选项,可以将其直接传递给执行
。如果模板非常简单,您可以在模板中使用顶级映射
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();
结果
keylabel:key1 : valuelabel:value1
keylabel:key2 : valuelabel:value2
这里的相关问题我认为最接近的方法是将条目集对象包装在
列表中
并检索模板中还有语法错误。最后一行应该是{{/mapA}
,而不是{{/mapA>
这真的有效吗?我试过了,但在我根据代码样本和文档给出答案时,它不起作用。OP接受了答案,所以我认为它对他有效。它对我有效,但我必须配置MustacheFactory以允许对java.util.Map中的方法进行内省。我使用的是mustac的java版本这里的图书馆:我明白了,这是对答案的有益补充:)@Dhiraj你能分享一下你是怎么做到的吗?我不知道我怎么能在MustacheFactory上配置内省。
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();
{{#.}}
keylabel:{{key}} : valuelabel:{{value}}
{{/.}}
keylabel:key1 : valuelabel:value1
keylabel:key2 : valuelabel:value2