热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java表达式解析引擎_Aviator轻量Java表达式引擎

Aviator是一个轻量级、高性能的Java表达式执行引擎,它动态地将表达式编译成字节码并运行。使用com.googlecode.aviatoraviator{ver

Aviator 是一个轻量级、高性能的 Java 表达式执行引擎,它动态地将表达式编译成字节码并运行。

使用

com.googlecode.aviator

aviator

{version}

最简单直观的使用:

import com.googlecode.aviator.AviatorEvaluator;

public class TestAviator {

public static void main(String[] args) {

Long result = (Long) AviatorEvaluator.execute("1+2+3");

System.out.println(result);

}

}

更加复杂的使用方式可以参考 wiki,文档已经足够详细,不在重复。

源码解析

执行表达式

主要接口

218ad30c6c44423a083b1d7dadec0ecb.png

AviatorEvaluator 最重要的一个方法

execute(String expression)

execute(String expression, Map env)

execute(String expression, Map env, boolean cached)

用来执行表达式,并获取结果。围绕这个方法也有可以传入变量的 exec 方法

exec(String expression, Object... values)

内置方法和自定义方法

自定义方法

4e7c5230b73637d643f13843c73b19f0.png

主要可以分为以下几大类,包括数学计算相关,字符串处理相关

数学计算

MathAbsFunction

MathCosFunction

MathLog10Function

MathLogFunction

MathPowFunction

MathRoundFunction

MathSinFunction

MathSqrtFunction

MathTanFunction

字符串相关

StringContainsFunction

StringEndsWithFunction

StringIndexOfFunction

StringJoinFunction

StringLengthFunction

StringReplaceAllFunction

StringReplaceFirstFunction

StringSplitFunction

StringStartsWithFunction

StringSubStringFunction

序列相关方法

SeqCompsitePredFunFunction

SeqCountFunction # count(list) 长度

SeqFilterFunction # 过滤

SeqIncludeFunction # 是否在序列中

SeqMakePredicateFunFunction

SeqMapFunction # 遍历序列

SeqPredicateFunction

SeqReduceFunction # 求和

SeqSortFunction

SeqEveryFunction # 每个都满足

SeqNotAnyFunction # 不在

SeqSomeFunction # 序列中一个元素满足

额外的方法

BinaryFunction

BooleanFunction

Date2StringFunction

DateFormatCache

DoubleFunction

LongFunction

NowFunction

PrintFunction

PrintlnFunction

RandomFunction

StrFunction

String2DateFunction

SysDateFunction

表达式语法解析

FakeCodeGenerator

演示将中缀表达式转换为后缀表达式

reference



推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
author-avatar
堵晴__晨1997_361
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有