MVEL表达式案例

MVEL表达式是一个功能强大的基于Java应用程序的表达式语言,由于业务需要,在springbbot中集成了部分功能,下面是一些测试案例:

@Test
    public void expressionTest(){
        String expression = "if (param > 0) {return \"person:[123,234,356]\"; } else if (param == -1) { return \"Minus one!\"; } else { return \"Something else!\"; }";
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("param", 2);
        Object object = MVEL.eval(expression, paramMap);
        log.debug("-------------------------object:{}",object);
        System.out.println(object); // Greater than zero!
        String[] replace = object.toString().replace("person:", "").replace("[","").replace("]","").split(",");
        Arrays.asList(replace).forEach(item -> {
            log.debug("item:{}",item);
        });
        System.out.println("success");
    }

    /**
     * 基本解析表达式
     */
    @Test
    public void expressionTest1(){
        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 expressionTest2(){
        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 expressionTest3(){
        HashMap<Object, Object> srcMap = new HashMap<>();
        srcMap.put("name","zs");
        srcMap.put("age",10);
        srcMap.put("sex","女");
        //字段映射关系
        HashMap<String, String> mapping = new HashMap<>();
        mapping.put("name","name");
        mapping.put("age","age");
        //这里先把当前年份写死为2019
        mapping.put("birthYear","2019-age");
        //目标对象
        HashMap<Object, Object> targetMap = new HashMap<>();
        //k为目标表字段,v为转换规则
        mapping.forEach((k,v)->{
            Object reValue = MVEL.eval(v,srcMap);
            System.out.println(v+":"+reValue);
            targetMap.put(k,reValue);
        });
        System.out.println("源对象"+srcMap); //源对象{sex=女, name=zs, age=10}
        System.out.println("目标对象"+targetMap); //目标对象{birthYear=2009, name=zs, age=10}
    }

    /**
     * 多语句分号隔开   返回值无需 return
     */
    @Test
    public void expressionTest4(){
        String expression = " a = 10; b = (a = a * 2) + 10;b;";
        Map<String, Object> paramMap = new HashMap<>();
        //即便map没有任何内容 ,也需要传map 不然会报错
        Object object = MVEL.eval(expression,paramMap );
        System.out.println(object); // true
    }

    /**
     * null 和nil 都表示空
     */
    @Test
    public void expressionTest5(){
        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 expressionTest6(){
        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 expressionTest7(){
        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);
    }

    /**
     *  三元声明
     */
    @Test
    public void expressionTest8(){
        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);
    }

我是空谷有来人,谢谢大家支持!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中通过re模块中的相应方法来支持正则表达式的匹配、查找和替换等功能。你可以使用re模块中的fullmatch方法来进行全匹配。 关于正则表达式的写法,通常情况下可以省略正则表达式前面的^和后面的$。^用于匹配字符串的开头,$用于匹配字符串的结尾。如果省略^,则表示匹配任意位置的字符串,如果省略$,则表示匹配包含指定模式的字符串。因此,省略^和$可以获得更灵活的匹配结果。 对于正则表达式案例中的编程语言排行,具体的正则表达式写法可以根据具体需求来确定。例如,可以使用正则表达式r'\bpython\b'来匹配单独的"python"单词。其中,\b表示单词的边界。这样可以避免匹配到其他包含"python"的字符串。 总而言之,正则表达式是描述特征并验证字符串是否符合这个特征的工具。在Python中,可以使用re模块中的方法来支持正则表达式的应用。具体的正则表达式写法可以根据需求来确定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python正则表达式实例详解](https://blog.csdn.net/wads23456/article/details/115708526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [详解Python正则表达式(含丰富案例)](https://blog.csdn.net/Dream_Gao1989/article/details/123440771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值