当前位置: 首页 > news >正文

aviator 自定义表达式

引入依赖

如果你使用的是 Maven 项目,在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>com.googlecode.aviator</groupId>
    <artifactId>aviator</artifactId>
    <version>5.3.2</version>
</dependency>

 基本表达式求值

import com.googlecode.aviator.AviatorEvaluator;

public class BasicExpressionExample {
    public static void main(String[] args) {
        // 定义一个简单的数学表达式
        String expression = "2 + 3 * 4";
        // 执行表达式求值
        Object result = AviatorEvaluator.execute(expression);
        System.out.println("表达式 " + expression + " 的计算结果是: " + result);
    }
}

自定义函数类 

import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.runtime.function.AbstractFunction;
import com.googlecode.aviator.runtime.function.FunctionUtils;
import com.googlecode.aviator.runtime.type.AviatorBoolean;
import com.googlecode.aviator.runtime.type.AviatorDouble;
import com.googlecode.aviator.runtime.type.AviatorObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 自定义函数类
class AddFunction extends AbstractFunction {
    @Override
    public String getName() {
        return "strIn";
    }

    @Override
    public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2) {
        String city = FunctionUtils.getStringValue(arg1, env);
        String cityListJson = FunctionUtils.getStringValue(arg2, env);
        List<String> cityList = JSON.parseObject(cityListJson, List.class);
        boolean flag = cityList.contains(city);
        return AviatorBoolean.valueOf(flag);
    }
    
    
}

public class CustomFunctionExample {
    public static void main(String[] args) {
        // 注册自定义函数
        AviatorEvaluator.addFunction(new AddFunction());
        // 定义一个调用自定义函数的表达式
        String expression = "strIn(x, y)";
        
        
        List<String> cityList = Lists.newArrayList("四川", "成都", "郑州");
        // 创建一个 Map 用于存储变量的值
        Map<String, Object> env = new HashMap<>();
        env.put("x", "郑州");
        env.put("y", JSON.toJSONString(cityList));
        // 执行表达式求值,并传入变量环境
        Object result = AviatorEvaluator.execute(expression, env);
        System.out.println("表达式 " + expression + " 的计算结果是: " + result);
    }
}

相关文章:

  • 猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新
  • 设计模式:工厂方法模式 - 高扩展性与低耦合的设计之道
  • 【AI】免费GPU算力平台部署wan2.1
  • 三肽-10瓜氨酸(核心蛋白聚糖肽)-抗皱抗衰 改善肤质
  • 华为的欧拉操作系统怎么进行开发、环境搭建、编译、调试等
  • 分库分表设计与Java实践:从理论到实现
  • 【KWDB 创作者计划】KWDB 数据库全维度解析手册
  • 机器学习--网格搜索
  • 第一部分——Docker篇 第四章 搭建镜像仓库
  • 路由器端口映射设置方法教程,和无公网IP内网穿透实现外网访问方案步骤
  • AIP-217 不可达资源
  • 【Redis】string类型
  • 算法---子序列[动态规划解决](最长递增子序列)
  • 在 Wireshark 中如何筛选数据包
  • 在线论坛系统
  • Charles抓包-安装和IOS抓包指导
  • HTML、CSS、JavaScript
  • selenium 常用方法
  • CTF web入门之命令执行
  • 论文解读 | Task Shield:Agent“任务对齐“的防护盾,抵御提示注入攻击新方案
  • 沈阳网站/seo平台
  • 如何创建一个网站卖东西/产品推广
  • 网站模板预览与编辑器/外包公司是正规公司吗
  • 织梦网站挂马教程/广告关键词
  • 福州企业网站模板建站/今日北京新闻
  • 微商城网站建设教程/软文代写接单平台