Example MVEL2.0 of (a)

This article is a little example of integration mvel2.0 of java:

If the expression has a variable, you must pass a map when the analytical expression

MVEL.eval(expression, vars);
/**
* 基本解析表达式
*/
@Test
public void test(){
String expression ="foobar > 99";
Map vars = new HashMap();
vars.put("foobar",new Integer(100));
// We know this expressionshould return a boolean.
Boolean result = (Boolean) MVEL.eval(expression, vars);
if (result.booleanValue()) {
System.out.println("Itworks!");
}
}

/**
* 变量判空
*/
@Test
public void test4(){
String expression = "a == empty && b == empty";

Map<String, Object> paramMap = new HashMap<>();
paramMap.put("a", "");
paramMap.put("b", null);
Object object = MVEL.eval(expression, paramMap);
System.out.println(object); // true
}

   / ** 
*
* /
@Test
public void Test () {
the HashMap <Object, Object> = new new srcMap the HashMap <> ();
srcMap.put ( "name", "ZS");
srcMap.put ( "Age", 10);
srcMap.put ( "Sex", "F");
// field mapping between
the HashMap <String, String> mapping = new new the HashMap <> ();
mapping.put ( "name", "name");
mapping .put ( "Age", "Age");
// here first to write die for the current year 2019
mapping.put ( "Birthyear", "2019-Age");
// target object
HashMap <Object, Object> targetMap = the HashMap new new <> ();
// K for the target table field, v is the conversion rule
mapping.forEach((k,v)->{
Object reValue = MVEL.eval(v,srcMap);
System.out.println (V + ":" + revalue);
targetMap.put (K, revalue);
});
System.out.println ( "source object" + srcMap); // {sex = female source object, name ZS =, Age = 10}
System.out.println ( "target object" + targetMap); // 2009 = Birthyear audiences {, name = ZS, Age = 10}
}
/**
* 获取对象属性
*/
@Test
public void test2(){
UserInfo user = new UserInfo();
user.setUserName("1234");
String expression = "user.userName = '123'";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("user",user);
Object object = MVEL.eval(expression, paramMap);
System.out.println(object); // true
}
/ ** 
* returns the value separated by semicolons Multi without return
* /
@Test
public void Test3 () {
String = expression The "A = 10; B = (A = A * 2) + 10; B;";

  the Map < String, Object> = paramMap new new HashMap <> ();
// even if the map has no content, but also need to pass map or will be error
        Object object = MVEL.eval(expression,paramMap );
        System.out.println(object); // true
}[
/**
* null 和nil 都表示空
*/
@Test
public void test4(){
String expression = "a == null && b == nil";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("a", null);
paramMap.put("b", null);
Object object = MVEL.eval(expression, paramMap);
System.out.println(object); // true
}
/**
* 两种解析表达式方式
*/
@Test
public void test5(){
UserInfo foo = new UserInfo();
foo.setUserName("test");
Map context = new HashMap();
String expression = "foo.userName == 'test'";
VariableResolverFactory functionFactory = new MapVariableResolverFactory(context);
context.put("foo",foo);
Boolean result = (Boolean) MVEL.eval(expression,functionFactory);
System.out.println(result);

Serializable compileExpression = MVEL.compileExpression(expression);
result = (Boolean) MVEL.executeExpression(compileExpression, context, functionFactory);
System.out.print(result);
}
/**
*基本表达式计算,map工厂
*/
@Test
public void test3(){
UserInfo userInfo = new UserInfo();
String exp = "a + b > c";
Map varsMap = new HashMap();
varsMap.put("a", 1); varsMap.put("b", 2);varsMap.put("c", 2);
VariableResolverFactory factory = new MapVariableResolverFactory(varsMap);
Object eval = MVEL.eval(exp, factory);
System.out.println(eval);
}

/ ** 
* space security operator user.?parent.name
* /
@Test
public void Test4 () {
the UserInfo the UserInfo User new new = ();
user.setUserName ( "XM");
user.setPassword ( "123");
user.setParent (the parent new new ( "xmfather"));
// User has a parent object attribute parent attribute has a name attribute
String exp = "user.?parent.name";
the Map <String, Object> = new new Factory the HashMap <> ();
factory.put ( "User", User);
// new new MapVariableResolverFactory VariableResolverFactory Factory = ();
Object MVEL.eval the eval = (exp, Factory);
System.out.println (the eval);
}

/**
* 集合遍历
*/
@Test
public void test5(){
List<Integer> list = new ArrayList<>();
Map<String,Object> map = new HashMap<>();
Map<String,Object> map2 = new HashMap<>();
list.add(0);
list.add(1);
list.add(2);
String exp = "list[0]";
String exp2 = "map2.list";
map2.put("list",list);
map.put("list",list);
map.put("map2",map2);
Object eval = MVEL.eval(exp2,map);
System.out.println(eval);
}
/**
* Strings as Arrays
*/
@Test
public void test6(){
String foo = "My String";
String exp = "foo[0]";
Map<String,Object> map = new HashMap<>();
map.put("foo",foo);
Object eval = MVEL.eval(exp,map);
System.out.println(eval);
}

/**
* If-Then-Else
*/
@Test
public void test7(){
String exp = "\n" +
"if (a > 0) {\n" +
" System.out.println(\"Greater than zero!\");\n" +
"}\n" +
"else if (a == -1) { \n" +
" System.out.println(\"Minus one!\");\n" +
"}\n" +
"else { \n" +
" System.out.println(\"Something else!\");\n" +
"}\n";
Map<String,Object> map = new HashMap<>();
map.put("a",1);
Object eval = MVEL.eval(exp,map);
}  
/**
* 三元声明
*/
@Test
public void test9(){
String expression = "num > 0 ? \"Yes\" : \"No\";";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("num", 2);
Object object = MVEL.eval(expression, paramMap);
System.out.println(object);
}
/ ** 
* the Foreach it accepts two parameters separated by a colon, the first local variable is the current element,
* a second set or array to iterate.
* /
@Test
public void test10 () {

List <String> = new new people the ArrayList <> ();
people.add ( "name");
people.add ( "XM");
people.add ( "XL");
= expression The String "COUNT = 0; \ n-" +
"the foreach (name: people) {\ n-" +
"COUNT ++; \ n-" +
"System.out.println (\" the Person # \ "COUNT + + \": \ "+ name); \ n-" +
"}";
the Map <String, Object> = new new paramMap the HashMap <> ();
paramMap.put ( "people", people);
Object Object = MVEL.


String exp2 = "str = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n" +
" \n" +
"foreach (el : str) {\n" +
" System.out.print(\"[\"+ el + \"]\"); \n" +
"}";
MVEL.eval(exp2,paramMap);



}

/**
* MVEL 2.0,使用for关键字简单地简化foreach
*/
@Test
public void test10_2(){
String expression ="['Jim','Bob','Tom']";
List<String> l =(List<String>) MVEL.eval(expression);
for(String str:l){
System.out.println(str);
}

String exp = "count = 0;\n" +
"for (name : l) {\n" +
" count++;\n" +
" System.out.println(\"l #\" + count + \":\" + name);\n" +
"}";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("l",l);
MVEL.eval(exp,paramMap);
}
  /**
*MVEL对列表、数组、map的操作
*/
@Test
public void test11(){
//list
String expression ="['Jim','Bob','Tom']";
List<String> l =(List<String>) MVEL.eval(expression);
for(String str:l){
System.out.println("list"+str);
}

//数组
String exp2 = "{'Jim','Bob','Tom'}";
Object str = MVEL.eval(exp2);
if(str.getClass().isArray()){
System.out.println("array"+String.valueOf(Array.get(str, 0)));
}

//map
String exp3 ="['Bob' : new com.demo.po.UserInfo('Bob'), 'Michael' : new com.demo.po.UserInfo('Michael')]";
Map o = (Map ) MVEL.eval(exp3);
UserInfo u = (UserInfo) o.get("Bob");
System.out.println("map"+u.getUserName());

}

/**
* Do While
*/
@Test
public void test12(){
String exp3 = "do { \n" +
" System.out.println(\"当符合while中条件就执行:\"+x);\n" +
" --x } \n" +
"while (x >= 5 );";
Map<String,Object> map = new HashMap<>();
map.put("x",10);
MVEL.eval(exp3,map);

}
/**
* Do Until
*/
@Test
public void test13(){
String exp3 = "do { \n" +
" System.out.println(\"当不符合while中条件就执行:\"+x);\n" +
" --x } \n" +
"until (x < 5 );";
Map<String,Object> map = new HashMap<>();
map.put("x",10);
MVEL.eval(exp3,map);}

}
/**
* while
*/
@Test
public void test(){
String exp3 = "while(x >= 5){" +
"System.out.println(\"当符合while中条件就执行:\"+x);" +
"--x}";
Map<String,Object> map = new HashMap<>();
map.put("x",10);
MVEL.eval(exp3,map);
}


/**
* until
*/
@Test
public void test2(){
String exp3 = "until(x < 5){" +
"System.out.println(\"当不符合while中条件就执行:\"+x);" +
"--x}";
Map<String,Object> map = new HashMap<>();
map.put("x",10);
MVEL.eval(exp3,map);
}
/**
* 投影1.0
*/
@Test
public void test3(){
List<UserInfo> users = new ArrayList<>();
users.add(new UserInfo("xm"));
users.add(new UserInfo("xh"));
users.add(new UserInfo("xl"));
String exp3 = "parentNames = (userName in users); parentNames;" ;
Map<String,Object> map = new HashMap<>();
map.put("users",users);
List<UserInfo> eval = (List<UserInfo>) MVEL.eval(exp3, map);
System.out.println(eval);
}
/**
*投影2.0
*/
@Test
public void test3_2(){
List<UserInfo> users = new ArrayList<>();
users.add(new UserInfo(new Parent("xm")));
users.add(new UserInfo(new Parent("xh")));
users.add(new UserInfo(new Parent("xl")));
// String exp3 = "foo=(name in (parent in users));foo" ;
String exp3 = "foo=(parent.name in users);foo" ;
Map<String,Object> map = new HashMap<>();
map.put("users",users);
List<UserInfo> eval = (List<UserInfo>) MVEL.eval(exp3, map);
System.out.println(eval);
}

/**
*投影3.0过滤投影
*/
@Test
public void test3_3(){
List<UserInfo> users = new ArrayList<>();
List<UserInfo> fams = new ArrayList<>();
users.add(new UserInfo("xm",fams));
users.add(new UserInfo("xh",fams));
users.add(new UserInfo("xl",fams));
String exp3 = "($ in users if $.userName contains 'h');" ;
Map<String,Object> map = new HashMap<>();
map.put("users",users);
Object eval = MVEL.eval(exp3, map);
System.out.println(eval);
}
/**
* 过滤投影2.0
*/
@Test
public void test4(){
String exp3 = "(($ < 10) in [2,4,8,16,32]); " ;
String exp4 = "($ in [2,4,8,16,32] if $ < 10); "; // returns [2,4,8]
Object eval = MVEL.eval(exp3);
System.out.println(eval);
Object eval2 = MVEL.eval(exp4);
System.out.println(eval2);
}
/**
* 导入调用简单hello函数
*/
@Test
public void test()throws IOException {
File scriptFile = new File("src/main/resources/mvel/hello.el");
Map map = new HashMap();
map.put("name", "小明");
MVEL. evalFile(scriptFile, ParserContext.create(), map);
Object obj = MVEL. eval("hello(name);", map);
}

//hello.el的内容
def hello(String name){
System.out.println("hello" + name);
}
/ ** 
* the Lambda (anonymous function)
* /
@Test
public void test2 () {
String exp = "threshold = DEF (X) {X> = 10 X:? 0}; \ n-" +
"Result = threshold (NUM ); \ n-"+
" System.out.println (Result); ";
the Map Map new new = the HashMap ();
map.put (" NUM ", 15);
. MVEL the eval (exp, Map);
}


now interceptors , closure, intersection, type casting, and using the format and some questions are not thoroughly studied


Guess you like

Origin www.cnblogs.com/cg14/p/11870882.html