我正在尝试在我的代码中使用'运算符'中的MVEL来评估表达式
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);
给出错误:语法错误或不兼容的类型
答案 0 :(得分:2)
这是解决方案。您需要使用containsAll
另请注意,您在第二个列表中拼错了澳大利亚。我不确定这是否是故意检查评估。
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