Java 有没有人有使用循环的简单JEXL示例。我希望迭代一个简单的数组来输出各种字符串值?

Java 有没有人有使用循环的简单JEXL示例。我希望迭代一个简单的数组来输出各种字符串值?,java,jexl,Java,Jexl,有没有人有使用循环的简单JEXL示例。我希望迭代一个简单的对象arraylist来输出各种字符串值 循环遍历数组、集合、映射、迭代器或枚举的项,例如 for(item : list) { x = x + item; } 其中item和list是变量。现在不推荐使用foreach(列表中的项)的jexl1.1语法 import java.util.HashMap; 导入java.util.Map; 导入org.apache.commons.jexl2.Expression; 导入or

有没有人有使用循环的简单JEXL示例。我希望迭代一个简单的对象arraylist来输出各种字符串值

循环遍历数组、集合、映射、迭代器或枚举的项,例如

for(item : list) {
    x = x + item; 
}
其中item和list是变量。现在不推荐使用foreach(列表中的项)的jexl1.1语法

import java.util.HashMap;
导入java.util.Map;
导入org.apache.commons.jexl2.Expression;
导入org.apache.commons.jexl2.JexlContext;
导入org.apache.commons.jexl2.JexlEngine;
导入org.apache.commons.jexl2.MapContext;
公共班机{
公共静态void main(字符串[]args){
JexlContext JexlContext=new MapContext();
Map functions=newhashmap();
功能。输出(“系统”,系统。输出);
JexlEngine jexl=新的JexlEngine();
jexl.setFunctions(函数);
Expression=jexl.createExpression(“for(item:list){system:println(item)}”);
expression.evaluate(jexlContext);
}
}
pom.xml

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-jexl</artifactId>
    <version>2.1.1</version>
</dependency>

org.apache.commons
康姆斯杰克勒酒店
2.1.1

下面是452'输入的完整示例:


看起来需要使用脚本而不是表达式

此操作失败,错误为“分析'for'中的错误”

然而,这是可行的

e.createScript("for(x : a) { b=x }").evaluate(c)

首先,您应该使用脚本计算器,而不是表达式计算器。表达式计算器不支持复杂的循环语法。提及

JexlScript

这些允许您使用多个语句,并且可以使用变量 分配、循环、计算等。或多或少可以是什么 在其基本级别上用Shell或JavaScript实现。结果来自 最后一个命令是从脚本返回的

JxltEngine.Expression

这些是生成“一行”文本的理想选择,如屏幕上的“toString()” 类固醇。要进行计算,请使用类似EL的语法,如中所示 ${someVariable}。括号之间的表达式的行为 就像一个JexlScript,而不是一个表达式。您可以使用分号来 执行多个命令,最后一个命令的结果为 从脚本返回。您还可以使用2次传球 使用#{someScript}语法进行计算

试试这个,

JexlScript jexlExpression = jexl.createScript("var x='';for(item:[1,2,3]){ x=x+item;}");

jexlExpression.evaluate(jexlContext);
一旦这对您有效,您也可以使用自己的数组。

应该使用createScript()而不是使用版本3.1的createExpression()
one
two
e = new org.apache.commons.jexl3.JexlBuilder().create();
c = new org.apache.commons.jexl3.MapContext();
c.set("a", Arrays.asList(1,2,3));
e.createExpression("for(x : a) { b=x }").evaluate(c)
e.createScript("for(x : a) { b=x }").evaluate(c)
JexlScript jexlExpression = jexl.createScript("var x='';for(item:[1,2,3]){ x=x+item;}");

jexlExpression.evaluate(jexlContext);