我正在寻找一个易于计算的字符串,作为包含双精度和布尔值的布尔表达式。
(exposeOk && (creditPoints >= 114.5)) || stateAchieved
我已经看过javaluator了,但我不确定它是否在一个表达式中支持多种数据类型,比如double和boolean?!
最大的挑战是,变量值不是存储在变量“exposeOk”中,而是存储在包含字符串-值对的对象列表中。因此,如果计算器需要exposeOk的值,它必须在列表中搜索包含字符串“exposeOk”的对象,并且必须使用存储在该对象中的值。
我希望有人能帮助我完成这个挑战;-)
解决方案取决于表达式的格式。Java和javascript表达式类似。如果该语法有效,那么可以使用内置javascript引擎来处理表达式。
首先在键/值集合上循环,并将它们构建成一个用分号分隔的字符串。然后附加表达式并调用引擎。
下面的代码只显示了机制。您仍然需要进行大量的错误检查。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Expr {
public static void main(String [] args) throws ScriptException {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
// Get your variables into javascript code
String vars = "exposeOk=true;creditPoints=120.5;stateAchieved=false";
// The expression
String expr = "(exposeOk && (creditPoints >= 114.5)) || stateAchieved";
String t = engine.eval(vars+";"+expr).toString();
System.out.println(t); // Prints "true"
}
}
您可以使用EL 3.0,现在可以在独立模式下使用
import java.util.HashMap;
import java.util.Map;
import javax.el.ELProcessor;
public class ExpressionLanguageExample {
public static void main(String[] args)
{
Map<String, Object> variables = new HashMap<>();
variables.put("exposeOk", true);
variables.put("creditPoints", 220.2);
variables.put("stateAchieved", true);
ELProcessor elProcessor = new ELProcessor();
for (Map.Entry<String, Object> entrySet : variables.entrySet()) {
String key = entrySet.getKey();
Object value = entrySet.getValue();
elProcessor.setValue(key, value);
}
Object eval = elProcessor.eval("(exposeOk && (creditPoints >= 114.5)) || stateAchieved");
System.out.println(eval);
}
}
一些链接:
http://www.slideshare.net/reza_rahman/whats-new-with-expression-language-in-java-ee-7http://www.adam-bien.com/roller/abien/entry/the_hidden_javaee_7_gem
问题内容: 我有一个布尔值列表: 并且我正在寻找一种方法来计算列表中的数量(因此,在上面的示例中,我希望返回值是。)我已经找到了一些示例,这些示例寻找特定元素的出现次数。因为我正在使用布尔运算,所以有效的方法吗?我在想类似或的东西。 问题答案: 等于。
我有一张布尔人的名单: 我正在寻找一种方法来计算列表中的数量(因此在上面的示例中,我希望返回值为)我已经找到了查找特定元素出现次数的示例,但是有没有更有效的方法,因为我正在使用布尔值?我在想一些类似于或的东西。
我正在寻找一种相对简单的(与编写解析器相比)方法来计算Java中的布尔表达式,我不想使用JEP库。 我有一个字符串表达式,如:
问题内容: 我正在寻找一种相对简单的方法(与编写解析器相比)来评估Java中的布尔表达式,并且我不想使用JEP库。 我有一个String表达式,例如:我的目标是用值替换变量。 有没有一种方法可以评估此表达式? 请记住,这可以是任何深度,因此编写解析器将非常复杂。 问题答案: 您可以使用Java6中的脚本引擎,并选择任何流行的脚本语言,例如Scala,Ruby,Python,Groovy和Jav
我开始学习布尔表达式。我正试图找出以下问题: 假设age1、age2和age3是int变量,假设答案是布尔变量。编写一个表达式,当age1小于或等于age2并且age2小于或等于age3时,该表达式将答案指定为true。否则答案应为false。 我已经尝试了一些东西,但对Java来说还是比较陌生的。我能把答案打印出来,但我的数字还是有问题。 这是错误的: 我只是不知道如何解决这个问题,或者代码中到
我正在对科特林进行修补,我正试图让我的头脑了解科特林中可为空的变量是如何工作的。这里我有一段代码,它执行布尔检查,以查看车辆是否超载。实现是处理可空变量的好方法还是有更优雅的方法? 非常谢谢!