12.MVEL脚本语法--投影与交集

来源:互联网 发布:python opencv clone 编辑:程序博客网 时间:2024/06/15 20:21
投影

投影是描述集合的方法之一,通过简单的语法你可以检索到集合中非常复杂的对象模型。

语法:in  比如:(foo in list)(对象属性  in 对象集合)
示例:
              User u1 = new User("张三" );
              User u2 = new User("李四" );
              User u3 = new User("王二" );
              List<User> l = new ArrayList<User>();
              l.add(u1);
              l.add(u2);
              l.add(u3);
               Map vars = new HashMap();
               vars.put("users",l);
              String expression = "foo=(name in users);foo";
              Object obj = MVEL. eval(expression,vars );
              System. out.println(obj);


复杂示例:    

              public class User {
                      private String name ;
                                 private Integer age ;
                      private Parent parent ;

                      public User(Parent parent) {
                      this.parent = parent;
                 }
                }
              User u1 = new User( new Parent("老大" ));
              User u2 = new User(new Parent("老二" ));
              User u3 = new User(new Parent("老三" ));
              List<User> l = new ArrayList<User>();
              l.add(u1);
              l.add(u2);
              l.add(u3);
               Map vars = new HashMap();
               vars.put( "users", l);
              String expression = "foo=(parent.name in users);foo" ;
              Object obj = MVEL. eval(expression, vars );
              System. out .println(obj);
 

投影可以支持嵌套投影,上面的脚本可以写成下面的形式:
foo=(name in (parent in users))

交集
我们可以根据投影这周方式获取交集,比如有一个User对象包含一个集合成员familyMembers,我们可以获取一个家庭成员姓名的集合:
familyMembers =(name in (familyMember in users))

过滤投影

MVEL提供通过if运算符构造的过滤条件来过滤投影,比如获取user集合中name 包含‘张’的用户,就可以使用过滤。
如下面的例子:
              User u1 = new User("张依依" );
              User u2 = new User("张尔尔" );
              User u3 = new User("老三" );
              List<User> l = new ArrayList<User>();
              l.add(u1);
              l.add(u2);
              l.add(u3);
               Map vars = new HashMap();
               vars.put("users", l);
              String expression = "($ in users if $.name contains '张')" ;
              Object obj = MVEL. eval(expression, vars );
              System. out.println(obj);

其他的例子:
(($ < 10) in [2,4,8,16,32]);       // returns [true, true, true, false, false]
($ in [2,4,8,16,32] if $ < 10);     // returns [2,4,8]
0 0
原创粉丝点击