如何在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
相关产品推荐
相关产品推荐

