You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Thymeleaf循环中统计if条件成立的次数

如何在Thymeleaf循环中统计if条件成立的次数

嗨,我来帮你搞定这个问题!你现在是想把原来循环打印重复字母T的逻辑,改成统计这些符合条件的条目数量对吧?其实Thymeleaf有挺实用的方法来实现,我给你分享两个常用的方案:

方案一:用集合过滤直接统计推荐

这种方法最简洁高效,不用嵌套循环,直接通过Thymeleaf的工具类筛选符合条件的元素再取数量:

<tr th:each="chore : ${chores}">
    <td>
        <!-- 过滤出符合条件的completion并统计数量 -->
        <span th:text="${#lists.size(#lists.filter(completions, 
            c -> c.chore?.chore_id == chore.chore_id and c.person?.person_id == persons[0].person_id))}">
        </span>
    </td>
</tr>

这里用到了Thymeleaf内置的#lists工具类:

  • 先用filter方法从completions列表里筛出同时匹配当前chore的ID和指定人员ID的条目
  • 再用size()直接拿到筛选结果的总数,最后输出这个数字就好

这种方式比原来的嵌套循环更高效,代码也更清晰,完全不需要再打印字母T了。

方案二:用局部变量在循环中累计计数

如果你因为某些原因想要保留原来的循环结构,也可以用Thymeleaf的局部变量来实时更新计数:

<tr th:each="chore : ${chores}">
    <td th:with="count=0">
        <!-- 遍历completions,符合条件时累加计数 -->
        <span th:each="completion : ${completions}" 
              th:if="${completion.chore?.chore_id == chore.chore_id and completion.person?.person_id == persons[0].person_id}"
              th:with="count=${count + 1}">
            <!-- 这里不再打印T,只负责更新计数 -->
        </span>
        <!-- 最后输出累计的计数结果 -->
        <span th:text="${count}"></span>
    </td>
</tr>

这个思路是先定义一个初始值为0的局部变量count,每次遇到符合条件的completion就把count加1,循环结束后再把最终的count值输出。Thymeleaf的局部变量是每个循环独立的,不用担心不同行的计数互相干扰。

两种方法都能完美替代你原来打印T的逻辑,直接输出你需要的数字哦!

备注:内容来源于stack exchange,提问作者dave_m

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:29:52