Как отсортировать значения шаблона бесплатного маркера HashMap - PullRequest
7 голосов
/ 08 мая 2011

У меня в Java это HashMap:

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

     map.put("k1",  "3");
     map.put("k2", "4");
     map.put("k3", "2");
     map.put("k4", "6");
     map.put("k5", "1");
     map.put("k6", "5");

Я печатаю с шаблоном freemarker в этом режиме:

<#list map?values as v>
${v} - 
</#list>

но печатается в следующем порядке:

2 - 6 - 1 - 5 - 3 - 4

Я хотел бы напечатать в следующем порядке:

1 - 2 - 3 - 4 - 5  -6

как можно отсортировать значения с помощью шаблона freemarker?

Ответы [ 5 ]

6 голосов
/ 09 мая 2011

Попробуйте:

<#list map?values?sort as v>
    ${v} - 
</#list>

Обратите внимание на использование встроенной функции sort для последовательности значений.

4 голосов
/ 08 мая 2011

Если вы отображаете значения независимо от ключей, то вы можете взять значения из карты и построить из нее TreeSet. Тогда значения будут в порядке.

TreeSet ordered =  new TreeSet(map.values());

Тогда

 <#list ordered as v>
     ${v} - 
 </#list>
2 голосов
/ 08 мая 2011

Это поведение предсказуемо, поскольку HashMaps не упорядочены.Как было указано в комментариях, SortedMap, например TreeMap, будет сортировать ключиТаким образом, вам придется сократить некоторый код, чтобы отсортировать это.

См. Сортировать картупо значениям (Java)

0 голосов
/ 08 мая 2011

Если вам нужна итерация по HashMap в предсказуемом порядке, вы можете использовать LinkedHashMap с предсказуемым порядком итерации, он поддерживает двусвязный список, проходящий через все его записи.

0 голосов
/ 08 мая 2011

HashMap не заказан. Вместо этого следует использовать TreeMap , который реализует SortedMap : -

SortedMap<String, String> map = new TreeMap<String, String>();

Обратите внимание - Sorted Map provides a total ordering on its keys. Вы не можете отсортировать его по значениям. Если вы хотите отсортировать значения, вы всегда можете сделать это, отсортировав по Map.entrySet () , используя Comparable .

Также взгляните на этот очень похожий вопрос: TreeMap сортировка по значению

...