使用JexlEngine时,如何在JexlExpression中访问Map元素?
JEXL中直接将整个Map放入上下文并通过属性式访问的方法
当然可以直接把整个Map放入JexlContext,完全不需要手动将Map的每个元素单独添加到上下文里。
JEXL本身支持通过map.key这种类似对象属性的语法来访问Map中的元素,底层会自动调用Map的get("key")方法来获取对应的值。
举个简单的示例代码:
// 初始化JexlEngine JexlEngine jexl = new JexlBuilder().create(); // 准备要遍历的List<Map<String, Object>> List<Map<String, Object>> dataList = ...; for (Map<String, Object> itemMap : dataList) { // 创建上下文并将整个Map放入,命名为"item" JexlContext context = new MapContext(); context.set("item", itemMap); // 编写表达式,通过item.key访问Map中的元素 String exprStr = "item.name == '张三' && item.age > 18"; JexlExpression expr = jexl.createExpression(exprStr); // 计算表达式结果 Boolean result = (Boolean) expr.evaluate(context); // 处理结果... }
这种写法完全可行,而且是JEXL的标准特性——当你访问一个对象的属性时,如果该对象是Map,JEXL会优先尝试用属性名作为key调用Map的get方法。
内容的提问来源于stack exchange,提问作者Gary Greenberg
相关产品推荐
相关产品推荐

