2014-10-19 57 views
14

我新手,小胡子遍历地图,并想知道如何使用小胡子超过HashMap迭代给出这种Map如何使用小胡子的java

Map mapA = new HashMap(); 

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

地图键名称有所不同。理想情况下,我希望胡须能够遍历关键字和值。所以在Java它看起来像这样:

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

所以有人可以告诉我如何实现上面的胡子。我的意思是模板的外观如何?我想这个模板,但没有运气到目前为止:(

​​

所以,当我运行此模板,输出<li>标记出来空的,为什么呢? 感谢。

+0

相关任务离子在这里http://stackoverflow.com/questions/9981907/how-to-iterate-over-a-hash-in-mustache-js – Kirby 2016-03-14 17:55:53

+0

我认为最接近你可以来是将你的入口集对象包裹在'List'并检索它 – Kirby 2016-03-14 18:16:04

+0

模板中还有一个语法错误。最后一行应该是'{{/ mapA}}'而不是'{{/ mapA>' – Kirby 2016-03-22 20:09:32

回答

10

我不知道小胡子但基础上的代码,一些样品我都看到了,我想你应该在你的Java代码中定义一个变量entrySet这样

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

,并用它来代替在胡子代码

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

这真的有用吗?我试过了,它不起作用 – Dhiraj 2016-03-25 07:51:48

+0

当时我的代码示例和文档基于我的回答。 OP接受了答案,所以我认为它对他有效。 – Dici 2016-03-25 14:28:26

+1

它确实为我工作,但我必须配置MustacheFactory以允许在java.util.Map中反省方法。我从这里使用Java版本的胡子库:https://github.com/spullara/mustache.java – Dhiraj 2016-04-04 05:14:00

0

正如@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