如何在FreeMarker中基于已有序列创建新的过滤序列
FreeMarker序列多条件过滤实现方法
FreeMarker的filter内置函数完全支持在lambda表达式中使用多条件逻辑判断,直接用||(逻辑或)、&&(逻辑与)即可实现你的需求,写法和你预想的几乎一致,仅需注意语法细节:
基础多条件过滤示例
首先定义原序列:
<#assign seq = ['a', 'b', 'c', 'd', 'e']>
- 过滤得到
['a', 'b']:
<#assign seq1 = seq?filter(x -> x == 'a' || x == 'b')>
- 过滤得到
['b', 'd', 'e']:
<#assign seq2 = seq?filter(x -> x == 'b' || x == 'd' || x == 'e')>
简化多元素过滤的技巧
如果需要过滤的元素数量较多,重复写||会显得冗余,你可以先定义一个目标元素序列,再用contains方法简化判断:
<#assign targetSeq1 = ['a', 'b']> <#assign seq1 = seq?filter(x -> targetSeq1?contains(x))> <#assign targetSeq2 = ['b', 'd', 'e']> <#assign seq2 = seq?filter(x -> targetSeq2?contains(x))>
复杂组合条件示例
如果需要更复杂的逻辑(比如逻辑与+逻辑或的组合),可以用括号对条件分组,比如过滤出不是c且是a或b的元素:
<#assign filteredSeq = seq?filter(x -> (x == 'a' || x == 'b') && x != 'c')>
内容的提问来源于stack exchange,提问作者Luca Detomi
相关产品推荐
相关产品推荐

