簡體   English   中英

Java:用於使用未知標識符進行表達式解析和評估的庫

[英]Java: Library for expression parsing & evaluation with identifiers not known in advance

我需要評估一個布爾表達式。 目的是過濾一組帶標簽的項目 標記可以是任何名稱(例如Java標識符)。

例如:

foo OR (bar AND !baz)

對於標記為:

  • foo費用
  • foo bar boo
  • 酒吧

我事先不知道需要哪個名字。 我已經檢查了JEXL,但是它具有JexlContext ,它基本上是一個Map,需要在評估之前進行填充。

我需要一些庫,該庫調用回調函數來確定標識符是true還是false。 或任何其他允許標識符在評估之前未知的機制。

它必須像啤酒一樣免費(用於Maven插件),因此Jep毫無疑問。

我可以使用什么?

您可以提供不依賴於MapJexlContext實現。 無需在評估之前填充它,您可以對待它的has進行檢查, get為您的回調並忽略set的調用。

在Google的番石榴中嘗試謂詞

最簡單的方法是使用自Java 6以來屬於JDK的JavaScript。這是一個示例

    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    // populate variables foo, bar and baz to the engine, e.g.
    engine.put("foo", true);
    engine.put("bar", true);
    engine.put("baz", false);
    engine.eval("foo OR (bar AND !baz)"); 

有關更多信息,請查看Oracle的教程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM