深色模式
列表工具(Lists)
#lists 是 Thymeleaf 专为 List 集合设计的工具对象,提供空值安全的列表转换、大小计算、判空、包含判断、排序等核心操作(底层对应 org.thymeleaf.expression.Lists 类,可参考其 JavaDoc 获取完整 API)。
java
/*
* ======================================================================
* 请查阅 org.thymeleaf.expression.Lists 类的 Javadoc API 文档
* ======================================================================
*/
/*
* 将任意对象转换为 List 集合
*/
${#lists.toList(object)}
/*
* 计算 List 集合的大小(即元素数量)
*/
${#lists.size(list)}
/*
* 检查 List 集合是否为空(无任何元素)
*/
${#lists.isEmpty(list)}
/*
* 检查 List 集合中是否包含指定的单个元素,或所有指定元素
*/
${#lists.contains(list, element)}
${#lists.containsAll(list, elements)}
/*
* 对给定 List 的副本进行排序。
* 注意:List 中的元素必须实现 Comparable 接口,或你必须自定义一个比较器(Comparator)。
*/
${#lists.sort(list)}
${#lists.sort(list, comparator)}补充说明(贴合 Thymeleaf 列表操作技术语境)
1. 核心术语解析
| 英文术语 | 译法/说明 |
|---|---|
| Lists | List 工具类(Thymeleaf 表达式工具,#lists 是其在模板中的简写,专用于操作 Java List 集合) |
| toList | 转换为 List 集合(支持将数组、Set、单个对象等转为 List,单个对象封装为仅含该元素的 List,null 转为空 List) |
| size/isEmpty | 大小/是否为空(与 #sets 逻辑一致,分别对应 List.size()/List.isEmpty()) |
| contains/containsAll | 包含单个元素/包含所有元素(elements 为集合/数组类型,需所有元素存在才返回 true) |
| sort | 排序(对 List 副本排序,不修改原 List;无 comparator 时依赖元素自身的 Comparable 接口) |
| comparable/comparator | 可比较接口/比较器(前者是元素自身实现排序规则,后者是自定义排序规则) |
2. 关键逻辑解读(实战示例)
假设模板中有变量 nums = new Integer[]{3,1,2}(数组)、userList(包含 User 对象的 List,User 实现了 Comparable 接口按 age 排序),核心用法如下:
html
<!-- 1. 转换为 List -->
<div th:with="numList=${#lists.toList(nums)}">
转换后的 List:<span th:text="${numList}"></span> <!-- 输出 [3,1,2] -->
</div>
<!-- 2. 基础属性检查 -->
<div th:with="numList=${#lists.toList(nums)}">
List 大小:<span th:text="${#lists.size(numList)}"></span> <!-- 输出 3 -->
<div th:if="${#lists.isEmpty(numList)}">List 为空</div> <!-- 不显示 -->
<div th:if="${#lists.contains(numList, 2)}">包含元素 2</div> <!-- 显示 -->
</div>
<!-- 3. 排序(元素实现 Comparable 接口) -->
<div th:with="sortedNumList=${#lists.sort(numList)}">
自然排序后:<span th:text="${sortedNumList}"></span> <!-- 输出 [1,2,3] -->
</div>
<!-- 4. 自定义比较器排序(以字符串长度为例) -->
<div th:with="
strList=${#lists.toList(new String[]{'apple', 'banana', 'pear'})},
// 自定义比较器:按字符串长度排序
lenComparator=${T(java.util.Comparator).comparing(T(java.lang.String).length())}
">
按长度排序后:<span th:text="${#lists.sort(strList, lenComparator)}"></span> <!-- 输出 [pear, apple, banana] -->
</div>- 核心特性:
#lists.sort()操作的是 List 副本,原 List 不会被修改;若元素未实现 Comparable 且未传 comparator,会抛出ClassCastException。 - 注意点:
containsAll的第二个参数必须是集合/数组类型,传入单个值会报错。
3. 句式优化说明
- 补充“副本”“注意”等关键提示(原文隐含但开发中易踩坑),明确排序不修改原 List;
- 将“the members of the list must implement comparable”译为“List 中的元素必须实现 Comparable 接口”,补充“接口”二字,符合 Java 术语规范;
- 拆分长句为“核心操作+注意事项”的结构,避免直译导致的晦涩,同时保留
${#lists.xxx}表达式原样。
总结
#lists核心作用:在 Thymeleaf 模板中便捷操作 List 集合,支持类型转换、基础属性检查、元素存在性验证、排序;- 核心用法分类:
- 类型转换:
toList(object)(任意对象转 List,null 转空 List); - 基础检查:
size(list)(元素数量)、isEmpty(list)(是否为空); - 存在性验证:
contains(list, element)(单元素)、containsAll(list, elements)(多元素); - 排序:
sort(list)(自然排序,依赖 Comparable)、sort(list, comparator)(自定义排序);
- 类型转换:
- 关键注意点:排序操作仅修改 List 副本,元素未实现 Comparable 时必须传入自定义 comparator。
