有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

MVEL“in”运算符不适用于java中的集合

我试图在代码中使用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);

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


共 (1) 个答案

  1. # 1 楼答案

    这是解决办法。您需要使用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