Talend tMap表达式过滤器:如何针对动态值列表执行过滤
解决方案
不同技术栈下的实现方案如下:
原生Java/通用内存过滤场景
将动态值列表封装为HashSet,用contains方法替代多次equals判断,时间复杂度更低,值列表可完全动态传入:// 动态值列表可从上下文/参数传入,无需硬编码 Set<String> listOfValues = new HashSet<>(动态传入的列表); // 过滤逻辑替换为如下写法即可 listOfValues.contains(row1.col1)如果需要兼容值的前后空格、大小写等匹配规则,可提前对
listOfValues内的所有元素和row1.col1的取值做统一格式化处理。MyBatis等持久层框架场景
直接使用框架自带的动态SQL能力拼接in语句,列表参数动态传入即可:<select id="queryByCol1List" resultType="你的结果映射类"> SELECT * FROM 表名 WHERE col1 IN <foreach collection="listOfValues" item="val" open="(" separator="," close=")"> #{val} </foreach> </select>表达式引擎/低代码过滤场景
大部分表达式引擎(SpEL、QLExpress等)和BI/低代码工具都支持集合方法调用,过滤表达式可直接写为:#listOfValues.contains(row1.col1)执行前将
listOfValues作为上下文参数传入即可,部分可视化工具也可以直接选择属于/in操作符绑定动态列表变量。
内容的提问来源于stack exchange,提问作者Klaus Schuster
相关产品推荐
相关产品推荐

