Как перебирать карту с помощью усов в 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> выводятся пустым, почему? Благодарю.

Ответы

Ответ 1

Я не знаю усов, но, основываясь на некоторых образцах кода, которые я видел, я думаю, что вы должны определить переменную entrySet в вашем Java-коде, например,

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

и использовать его вместо mapA в коде уса.

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

Ответ 2

Как упоминалось выше @Dici, вы можете использовать entrySet. Вам не нужно использовать какие-либо специальные опции в factory и передать его непосредственно на 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

Ответ 3

Я видел это в одной библиотеке:

    public Map<String, Object> allowableValues;

А потом:

    {{#allowableValues}}
    {{#enumVars}}const {{{name}}} = {{{value}}};
    {{/enumVars}}{{/allowableValues}}