web-dev-qa-db-ja.com

java)で口ひげを使用してマップを反復処理する方法

私は口ひげの初心者で、このHashMapを前提として、口ひげを使用してMapを反復処理する方法を考えていました。

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();
   // ...
} 

だから誰かが口ひげで上記を達成する方法を教えてもらえますか?テンプレートはどのように見えるのでしょうか?私はこのテンプレートを試しましたが、今のところ運がありませんでした:(

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

したがって、このテンプレートを実行すると、出力<li>タグが空になります、なぜですか?ありがとう。

16
Simple-Solution

わかりません口ひげしかし、私が見たコードのいくつかのサンプルに基づいて、JavaコードでentrySet変数を定義する必要があると思いますこのような

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

mustacheコードでmapAの代わりに使用します

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

上記の@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
0
milesoldenburg