[freemarker] Map のデータでループを回す

Freemarker で Map のデータの一覧を表示させようとしたのだが、Java で EntrySet を利用するような感じで実現する方法はわからなかった。

Java なら以下のようなコードを書くのだが。

  for( Map.Entry entry : map.entrySet ) {
    System.out.println(entry.key() + " = " + entry.value());
  }

で、結局どうしたかというと、キーのリストでループを回せば実現できた。?keys を利用することで Map のキー集合を取得することができる。ちなみに ?values で値集合も取得できる。

<#assign map = {"aaa":"111", "ccc":"333", "bbb":"222"}>
<#list map?keys as key>
 ${key} = ${map[key]}
</#list>
 aaa = 111
 ccc = 333
 bbb = 222

Java で書くとこんな感じ。こっちの方がシンプルだった・・・

  for( Object key : map.keySet() ) {
    System.out.println(key + " = " + map.get(key));
  }

あと freemarker では ?sort によってコレクションをソートできることを知った。

<#assign map = {"aaa":"111", "ccc":"333", "bbb":"222"}>
<#list map?keys?sort as key>
 ${key} = ${map[key]}
</#list>
 aaa = 111
 bbb = 222
 ccc = 333

なんてことはないが、今日は ?keys ?values ?sort を覚えた。