Thymeleaf文档说明了排序列表:
/*
* Sort a copy of the given list. The members of the list must implement
* comparable or you must define a comparator.
*/
${#lists.sort(list)}
${#lists.sort(list, comparator)}
在我的文档模型中,我有一个带有键值对的映射列表(来自JBake静态页面生成器的published_content
列表)。在我的模板中,我想通过比较地图中某个键下存储的值来对此列表进行排序。
换句话说,list
变量的类型为List<Map<String, Object>>
,我想通过比较密钥"mykey"
下存储的每个地图中的值来对此列表进行排序。
如何在模板中制定这样的比较器?
答案 0 :(得分:3)
问题与纯Java排序问题有关,因为您需要一种方法来对地图列表进行排序,这已经得到了回复here。
相关代码:
public Comparator<Map<String, String>> mapComparator = new Comparator<Map<String, String>>() {
public int compare(Map<String, String> m1, Map<String, String> m2) {
return m1.get("name").compareTo(m2.get("name"));
}
}
Collections.sort(list, mapComparator);
使用mapComparator对列表进行排序后,您可以使用Thymeleaf表达式${#lists.sort(list, comparator)}
,如文档中所述。
答案 1 :(得分:1)
在Thymeleaf中,您需要使用完整的类名(包括包)。像这样:
<span th:each="doc : ${#lists.sort(documents, new com.mycompany.myapp.comparator.DocumentNameComparator())}">
...
</span>