当前位置: 首页 > 知识库问答 >
问题:

使用存储在列表中的变量计算Java中的布尔表达式

池恩
2023-03-14

我正在寻找一个易于计算的字符串,作为包含双精度和布尔值的布尔表达式。

(exposeOk && (creditPoints >= 114.5)) || stateAchieved

我已经看过javaluator了,但我不确定它是否在一个表达式中支持多种数据类型,比如double和boolean?!

最大的挑战是,变量值不是存储在变量“exposeOk”中,而是存储在包含字符串-值对的对象列表中。因此,如果计算器需要exposeOk的值,它必须在列表中搜索包含字符串“exposeOk”的对象,并且必须使用存储在该对象中的值。

我希望有人能帮助我完成这个挑战;-)

共有2个答案

简滨海
2023-03-14

解决方案取决于表达式的格式。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"

    }

}
顾骏祥
2023-03-14

您可以使用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来说还是比较陌生的。我能把答案打印出来,但我的数字还是有问题。 这是错误的: 我只是不知道如何解决这个问题,或者代码中到

  • 我正在对科特林进行修补,我正试图让我的头脑了解科特林中可为空的变量是如何工作的。这里我有一段代码,它执行布尔检查,以查看车辆是否超载。实现是处理可空变量的好方法还是有更优雅的方法? 非常谢谢!