使用 SpEL 进行循环和评估

Looping and evaulating with SpEL

首先,请考虑我作为开发人员和 Spring 用户的初学者。 我正在寻找这个问题的解决方案:

有一个给定的列表,其中填充了 JsonNode 对象,称为属性。我必须找到哪个正在根据给定的布尔表达式评估 true 。我想在上下文中注册一个集合,对其进行迭代并查找是否有任何属性使用 SpEl 计算为真,因此我不必每次都创建这个非常昂贵的上下文。

你知道如何更快地完成吗? (代码是假的。问题是真实的。)

//given
List<JsonNode> attributes;

attributes
    .stream()
    .anyMatch(attribute -> {
        ExpressionParser parser = new SpelExpressionParser();
        Expression exp = parser.parseExpression("attribute.name == 'John Doe'");
        EvaluationContext ctx = new StandardEvaluationContext(attribute);
        return exp.getValue(ctx, Boolean.class);
    });

感谢您的帮助!

您不需要为每个元素解析和构建上下文;您可以将根对象传递到 getValue().

解析一次表达式并使用 getValue(context, attribute, Boolean.class) 代替。

除非您需要自定义上下文,否则您甚至不需要。

getValue(attribute, Boolean.class)