2014-10-19 53 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