日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

牛逼,Java中表达式引擎工具就用它!建议收藏,一定用的到!!

發布時間:2025/3/16 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛逼,Java中表达式引擎工具就用它!建议收藏,一定用的到!! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在負責一個和定價有關的系統,要做分層的價格決策。在決策過程中有兩個訴求:

1、需要根據一定的表達式公式,進行分層決策。如訂單金額大于1000元時,給10塊錢紅包,介于100和1000之間的給5元紅包。
2、具體價格的產出,需要根據一定的公式。比如根據用戶訂單金額,乘一個固定的系數。

這時候,就需要一個表達式引擎。需要能夠做表達式匹配和數學公式計算。

調研了業內很多的表達式引擎工具,如Ognl、MVEL、IKExpression、Aviator等,根據易用性、性能、可維護性、功能多少等,最終選擇了Aviator這款工具。

Aviator

根據Aviator文檔的介紹,Aviator 的基本過程是將表達式直接翻譯成對應的 java 字節碼執行,除了依賴 commons-beanutils 這個庫之外(用于做反射)不依賴任何第三方庫,因此整體非常輕量級,整個 jar 包大小哪怕發展到現在 5.0 這個大版本,也才 430K。

同時, Aviator 內置的函數庫非常“節制”,除了必須的字符串處理、數學函數和集合處理之外,類似文件 IO、網絡等等你都是沒法使用的,這樣能保證運行期的安全,如果你需要這些高階能力,可以通過開放的自定義函數來接入。因此總結它的特點是:
? 高性能
? 輕量級
? 一些比較有特色的特點:
? 支持運算符重載
? 原生支持大整數和 BigDecimal 類型及運算,并且通過運算符重載和一般數字類型保持一致的運算方式。
? 原生支持正則表達式類型及匹配運算符 =~
? 類 clojure 的 seq 庫及 lambda 支持,可以靈活地處理各種集合
? 開放能力:包括自定義函數接入以及各種定制選項

用法

Aviator 用法很簡簡單,首先引入jar包:

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

獲取一個Aviator實例:

AviatorEvaluatorInstance aviatorEvaluator = AviatorEvaluator.getInstance()

接著,對表達式進行編譯:

Expression expression = aviatorEvaluator.compile("a > 100 && b< 100"); Expression expression = aviatorEvaluator.compile("a + 150");

在執行表達式驗證和計算。

expression..execute(params);

這里面對params是一個Map,Map中的Key就是表達式中的變量,如a、b等。

如:

AviatorEvaluator.getInstance().compile("a > 300 && a<500").execute(ImmutableMap.of("a", new BigDecimal(400)); AviatorEvaluator.getInstance().compile("a + 123.2").execute(ImmutableMap.of("a", 400)).compareTo(new BigDecimal("523.2"));

為了方便使用,我們還可以定一個util工具類:

/*** 表達式處理工具類** @author Hollis*/ public class ExpressionUtil {public static AviatorEvaluatorInstance aviatorEvaluator = AviatorEvaluator.getInstance();static {aviatorEvaluator.setOption(Options.ALWAYS_PARSE_FLOATING_POINT_NUMBER_INTO_DECIMAL, true);}/***表達式驗證**/public static boolean verify(String expression, Map<String, Object> params) {return (Boolean)aviatorEvaluator.compile(expression).execute(params);}/*** 表達式計算* @param expression 表達式* @param params 需要替換的表達式參數* @return calculate result*/public static BigDecimal calculate(String expression, Map<String, Object> params) {return (BigDecimal)aviatorEvaluator.compile(expression).execute(params);} }

使用單元測試對以上方法進行驗證:

public class ExpressionUtilTest {@Testpublic void test() {Assert.assertTrue(ExpressionUtil.verify("a > 300 && a<500", ImmutableMap.of("a", new BigDecimal(400))));Assert.assertFalse(ExpressionUtil.verify("a > 300 && a<500", ImmutableMap.of("a", new BigDecimal(600))));Assert.assertTrue(ExpressionUtil.verify("a > 300 && b<500 && c < 600",ImmutableMap.of("a", new BigDecimal(400), "b", new BigDecimal(400), "c", new BigDecimal(500))));Assert.assertFalse(ExpressionUtil.verify("a > 300 && b<500 && c < 600",ImmutableMap.of("a", new BigDecimal(400), "b", new BigDecimal(400), "c", new BigDecimal(700))));}@Testpublic void test1() {Assert.assertEquals(0,ExpressionUtil.calculate("a + 123.2", ImmutableMap.of("a", 400)).compareTo(new BigDecimal("523.2")));Assert.assertEquals(0,ExpressionUtil.calculate("a + b", ImmutableMap.of("a", new BigDecimal("0.1"), "b", new BigDecimal("0.2"))).compareTo(new BigDecimal("0.3")), 0);}}

以上,就是簡單的Aviator的使用方法,快快在你的代碼中實踐起來吧,如果有收獲,請一鍵三連哦!!!

總結

以上是生活随笔為你收集整理的牛逼,Java中表达式引擎工具就用它!建议收藏,一定用的到!!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: xxxxhd欧美| 91精品视频免费在线观看 | 国产精品久久久久aaaa | 成人a在线观看 | 国产妇女视频 | 日本免费黄色片 | 九九碰| 国产三级国产精品国产专区50 | 免播放器在线视频 | 一区二区三区精品国产 | 蜜臀久久久久久999 大陆熟妇丰满多毛xxxⅹ | 成人毛片在线观看 | 国产ts在线播放 | 自拍偷拍精品视频 | 草草影院国产第一页 | 99re热在线视频 | 国产乱妇4p交换乱免费视频 | 四虎成人在线 | 亚洲影视一区二区 | 日本成人精品 | 日产精品一区 | 一级片一区二区三区 | 日本最新中文字幕 | 免费看黄视频的网站 | 亚洲AV无码一区二区三区少妇 | 五月天丁香久久 | 毛片在线免费视频 | 911色 | av影音先锋 | 国产精品自产拍高潮在线观看 | 欧洲av在线播放 | 精品熟妇一区二区三区 | 欧美cccc极品丰满hd | 中文字幕女优 | 在线播放你懂的 | 一级空姐毛片 | 天天躁日日躁狠狠躁 | 91综合精品 | 一级艳片新婚之夜 | 91大奶 | 日韩精品欧美精品 | 夜夜春很很躁夜夜躁 | 国产激情一区二区三区在线观看 | 日韩av在线一区二区 | 日韩一级淫片 | 精品视频在线观看一区二区 | 国产欧美日韩综合精品一区二区三区 | 亚洲50p | 日日躁夜夜躁狠狠躁 | 一色屋免费视频 | 性猛交富婆╳xxx乱大交天津 | av高清在线免费观看 | 欧美性受xxxx黑人xyx性爽 | 日本不卡一二三 | 91九色porn| 一级黄毛片| 怨女1988国语版在线观看高清 | 痴汉电车在线播放 | 美女黄视频在线观看 | 村姑电影在线播放免费观看 | 日本在线激情 | 日韩在线观看视频网站 | 狠狠艹 | 99热伊人 | 色网站观看 | 黄色香蕉视频 | 精品国产视频一区二区三区 | 久久久久久久国产精品 | 爱操综合 | 91亚洲精品久久久蜜桃借种 | 色网在线 | wwwav视频| 欧美成人久久久免费播放 | 亚洲色图狠狠干 | 无码国产69精品久久久久网站 | 在线观看视频一区二区 | 影音先锋制服丝袜 | 在线看黄免费 | 美女精品 | 激情综合区| 久久美女免费视频 | 欧美另类在线播放 | 韩国美女主播跳舞 | 污视频网站免费观看 | 亚洲精品男女 | 久久久精彩视频 | jizz黄| 少妇一级片 | 久久好色 | 欧美97 | 毛片网站免费观看 | 一本久久综合亚洲鲁鲁五月天 | 国产免费高清视频 | 欧美性jizz18性欧美 | 人碰人人 | 亚洲色图27p| 91av一区| 日本精品一区二区在线观看 | 国产乱淫av片免费看 |