1、先看一个简单的例子,获取map的key中的值,并计算输出。
public class SpringELTest {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.setVariable("map", map);
int result = parser.parseExpression("#map['a'] * 8").getValue(context, int.class);
System.out.println(result31); // 8
}
}
2、复杂的例子,可根据配置多条配置规则过滤数据
public class SpringELTest {
public static void main(String[] args) {
List<Map<String, Object>> dataList = new ArrayList<>(10);
for (int i = 0; i < 10; i++) {
Map<String, Object> map1 = new HashMap<String, Object>(2);
map1.put("age", 18 + i);
map1.put("telNum", i % 2 == 0 ? "1886611002" + i : "1346611002" + i);
dataList.add(map1);
}
List<Map<String, Object>> resultList = tlFilter(dataList, listRule("@##age## > 20 && @##telNum## matches '^188\d{8}$', @##age## > 26 && @##telNum## matches '^134\d{8}$'"));
System.out.println(JacksonUtil.getJsonFromObject(resultList));
}
/**
* TL过滤数据,只要满足其中一条规则
*
* @param dataList 数据集合
* @param filterRule 规则list
* @return 满足规则的数据
*/
public static List<Map<String, Object>> tlFilter(List<Map<String, Object>> dataList, List<String> filterRule) {
List<Map<String, Object>> resultList = new ArrayList<>(dataList.size());
ExpressionParser expressionParser = new SpelExpressionParser();
for (Map<String, Object> dataMap : dataList) {
EvaluationContext context = new StandardEvaluationContext();
context.setVariable("map", dataMap);
for (String rule : filterRule) {
Expression expression = expressionParser.parseExpression(rule);
if (expression.getValue(context, Boolean.class)) {
resultList.add(dataMap);
}
}
}
return resultList;
}
/**
* 把规则配置转换为list
*/
public static List<String> listRule(String ruleConfig) {
List<String> filterRule = new ArrayList<>();
String[] rules = ruleConfig.split(",");
for (String rule : rules) {
while (rule.indexOf("@##") > -1) {
String key = rule.substring(rule.indexOf("@##") + 3, rule.indexOf("## "));
rule = rule.replace("@##" + key + "##", "#map['" + key + "']");
}
filterRule.add(rule);
}
System.out.println(filterRule);
return filterRule;
}
}