Skip to content

集合工具(Sets)

#sets:是专门用于处理 java.util.Set(集合)的工具方法集合:

java
/*
 * ======================================================================
 * 请查阅 org.thymeleaf.expression.Sets 类的 Javadoc API 文档
 * ======================================================================
 */

/*
 * 将任意对象转换为 Set 集合
 */
${#sets.toSet(object)}

/*
 * 计算 Set 集合的大小(即元素数量)
 */
${#sets.size(set)}

/*
 * 检查 Set 集合是否为空(无任何元素)
 */
${#sets.isEmpty(set)}

/*
 * 检查 Set 集合中是否包含指定的单个元素,或所有指定元素
 */
${#sets.contains(set, element)}
${#sets.containsAll(set, elements)}

补充说明(贴合 Thymeleaf 集合操作技术语境)

1. 核心术语解析

英文术语译法/说明
SetsSet 工具类(Thymeleaf 表达式工具,#sets 是其在模板中的简写,专用于操作 Java Set 集合)
toSet转换为 Set 集合(支持将数组、List、单个对象等任意类型转为 Set,单个对象会被封装为仅含该元素的 Set)
size大小(返回 Set 中元素的数量,对应 Java 中 Set.size() 方法)
isEmpty是否为空(返回布尔值,Set 无元素时为 true,对应 Java 中 Set.isEmpty() 方法)
contains/containsAll包含指定元素/包含所有指定元素(elements 为集合/数组类型,需所有元素都存在才返回 true)

2. 关键逻辑解读(实战示例)

假设模板中有变量 nums = [1,2,3,2](List 类型)、singleNum = 5(单个数值),核心用法如下:

html
<!-- 1. 转换为 Set(自动去重) -->
<div th:with="numSet=${#sets.toSet(nums)}">
  转换后的 Set 元素:<span th:text="${numSet}"></span> <!-- 输出 [1,2,3] -->
</div>
<div th:with="singleSet=${#sets.toSet(singleNum)}">
  单个对象转 Set:<span th:text="${singleSet}"></span> <!-- 输出 [5] -->
</div>

<!-- 2. 获取 Set 大小 -->
<div th:with="numSet=${#sets.toSet(nums)}">
  Set 元素数量:<span th:text="${#sets.size(numSet)}"></span> <!-- 输出 3 -->
</div>

<!-- 3. 检查 Set 是否为空 -->
<div th:if="${#sets.isEmpty(numSet)}">Set 为空</div> <!-- 不显示,因 numSet 非空 -->

<!-- 4. 检查是否包含指定元素 -->
<div th:if="${#sets.contains(numSet, 2)}">包含元素 2</div> <!-- 显示 -->

<!-- 5. 检查是否包含所有指定元素(elements 为集合/数组) -->
<div th:with="checkElements=${{1,3}}" 
     th:if="${#sets.containsAll(numSet, checkElements)}">包含 1 和 3 所有元素</div> <!-- 显示 -->
  • 核心特性:toSet 转换时会自动去重(符合 Set 集合“元素唯一”的特性);若传入 null,会返回空 Set 而非 null。
  • 注意点:containsAll 的第二个参数需为集合/数组类型(如 List、数组),传入单个值会触发运行时异常。

3. 句式优化说明

  • 补充括号注释(如“即元素数量”“无任何元素”),明确 size/isEmpty 的实际含义,贴合新手理解;
  • 将原文“Check if element or elements are contained in set”拆分为“检查 Set 集合中是否包含指定的单个元素,或所有指定元素”,用“单个/所有”区分 containscontainsAll 的差异,避免歧义;
  • 保留 ${#sets.xxx} 表达式原样,符合 Thymeleaf 模板语法规范,注释简洁且突出核心功能。

总结

  1. #sets 核心作用:在 Thymeleaf 模板中便捷操作 Set 集合,支持类型转换、大小计算、元素存在性检查;
  2. 核心用法分类:
    • 类型转换:toSet(object)(任意对象转 Set,自动去重,null 转空 Set);
    • 基础属性:size(set)(获取元素数量)、isEmpty(set)(判断是否为空);
    • 存在性检查:contains(set, element)(单元素)、containsAll(set, elements)(多元素);
  3. 关键注意点:containsAll 的第二个参数必须是集合/数组类型,且 toSet 转换会自动去重(Set 核心特性)。