0

我正在尝试在我的代码中使用 MVEL 'in' 运算符来评估表达式

List<String> countriesAvailable = new ArrayList<String>();
countriesAvailable.add("Australia");
countriesAvailable.add("France");
List<String> countriesVisited = new ArrayList<String>();
countriesVisited.add("Austria");
countriesVisited.add("France");
Map<String, List<String>> vars = new HashMap<String, List<String>>();
vars.put("countriesAvailable", countriesAvailable);
vars.put("countriesVisited", countriesVisited);
Boolean s = (Boolean) MVEL.eval("countriesVisited in countriesAvailable", vars);
System.out.println(s);

给出错误:语法错误或不兼容的类型

4

1 回答 1

3

这是解决方案。你需要使用containsAll

另请注意,您在第二个列表中拼错了 Australia。我不确定这是否是为了检查评估。

    List<String> countriesAvailable = new ArrayList<String>();
    countriesAvailable.add("Australia");
    countriesAvailable.add("France");

    List<String> countriesVisited = new ArrayList<String>();
    countriesVisited.add("Austria");
    countriesVisited.add("France");

    Map<String, List<String>> vars = new HashMap<String, List<String>>();
    vars.put("countriesAvailable", countriesAvailable);
    vars.put("countriesVisited", countriesVisited);

    Boolean s = (Boolean) MVEL.eval(
            "countriesAvailable.containsAll(countriesVisited)", vars);

    System.out.println("Result = " + s);

Result = false

您还可以使用java.util.Collections来执行脱节。并采取消极的态度。

Boolean s = 
   (Boolean) MVEL.eval(
         "!java.util.Collections.disjoint(countriesAvailable,countriesVisited)",
         vars);

Result = true

于 2013-07-02T22:07:14.473 回答