Как получить доступ к карте в файле шаблона скорости - PullRequest
3 голосов
/ 01 апреля 2012

когда я передал Map<String,String> в файл шаблона скорости и при попытке распечатать значения карты он сортируется (на основе значений ASCII).

Я делаю следующее:

это мой файл шаблона скорости ::

#set($tocList=${mapReference.mapValue})
#set($tocEntry="")

<div >
 #foreach($tocEntry in $tocList.keySet())
  <a href="#$tocEntry">$tocList.get($tocEntry)</a><br/>
 #end
</div>

Мой код Java:

 Map<String, String> map=new HashMap<String, String>();
 Map<String,HashMap> m1=new HashMap<String, HashMap>();

   \\values that we want to print in template file

   map.put("sdfhfg", "Df lm"); 
   map.put("chdgfhd", "gBc Jk");
   map.put("dghjdhdf", "gI Ml");

   m1.put("mapValue", (HashMap) map);

  VelocityEngine velocityEngine = VelocityEngineFactory.getVelocityEngine();
  VelocityContext context = new VelocityContext();
  context.put("img",model);
  context.put("mapReference",m1);
  context.put("iterator", new IteratorTool());


  Template t = velocityEngine.getTemplate("tocTemplate.vm");
  StringWriter writer = new StringWriter();
    t.merge(context , writer);
    System.out.println(writer);

Вывод:

 <div>
   <a href="#dghjdhdf">gI Ml</a><br/>
   <a href="#chdgfhd">gBc Jk</a><br/>
   <a href="#sdfhfg">Df lm</a><br/>
 </div>

Почему эти значениясортироваться?Я хочу напечатать карту как есть.

1 Ответ

8 голосов
/ 01 апреля 2012

Порядок HasMap не будет оставаться постоянным с течением времени, начиная с Javadoc :

Этот класс не дает никаких гарантий относительно порядка карты; в В частности, это не гарантирует, что порядок останется постоянным со временем.

Чтобы сохранить порядок, вы можете рассмотреть возможность использования LinkedHashMap , как указано ниже:

Этот связанный список определяет порядок итераций, который обычно порядок, в котором ключи были вставлены в карту

...