只要是开发框架的操作,永远都不可避免的要去进行集合数据的操作处理,在之前一直强调过,Spring认为数据与List集合是等价的,所以如果要想操纵List集合,利用"{内容,内容,...}"的形式就可以完成了.
范例:操作List集合内容
package cn.zwb.demo;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
Expression exp = parpser.parseExpression("{1,2,3,100}");
EvaluationContext context=new StandardEvaluationContext();
List<Integer> list=exp.getValue(context,List.class);
System.out.println(list);
}
}
而如果你只是定义一个空的List集合,那么就不设置内容,例如"{}".但是需要记住的是,此时List集合严格的来讲就是相当于使用了Collections,在这个工具类下面可以创建空集合,但是许多方法都是不支持的实现.
当然,如果现在真定义出了集合,那么也可以利用表达式采用索引的方式进行访问,
范例:索引访问集合
package cn.zwb.demo;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
Expression exp = parpser.parseExpression("{1,2,3}[1]");
EvaluationContext context=new StandardEvaluationContext();
System.out.println(exp.getValue(context));
}
}
正常来讲,如果真的要进行开发操作,往往都可以将集合设置为操作的变量进行处理.
范例:设置集合内容
package cn.zwb.demo;
import java.util.ArrayList;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
List<String> list = new ArrayList<String>();
list.add("啦啦啦");
list.add("fewfe");
Expression exp = parpser.parseExpression("#listdata[1]");
EvaluationContext context=new StandardEvaluationContext();
context.setVariable("listdata", list);
System.out.println(exp.getValue(context));
}
}
以上的这个操作设置的是List集合,既然是集合,那么set集合也一定可以设置.
范例:观察Set集合的配置
package cn.zwb.demo;
import java.util.HashSet;
import java.util.Set;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
Set<String> list = new HashSet<String>();
list.add("啦啦啦");
list.add("啦啦啦");
list.add("啦啦啦");
list.add("fewfe");
Expression exp = parpser.parseExpression("#listdata[1]");
EvaluationContext context=new StandardEvaluationContext();
context.setVariable("listdata", list);
System.out.println(exp.getValue(context));
}
}
除了List与Set集合之外,那么Map集合一定是不可能少的集合了.
范例:操作Map集合
package cn.zwb.demo;
import java.util.HashMap;
import java.util.Map;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
Map<String,String> map = new HashMap<String,String>();
map.put("啦啦啦","啦");
map.put("fewfe","f");
Expression exp = parpser.parseExpression("#listdata[fewfe]");
EvaluationContext context=new StandardEvaluationContext();
context.setVariable("listdata", map);
System.out.println(exp.getValue(context));
}
}
除了数据的设置之外,还可以进行数据的修改操作
范例:修改List集合数据
package cn.zwb.demo;
import java.util.ArrayList;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
List<String> list = new ArrayList<String>();
list.add("啦啦啦");
list.add("fewfe");
Expression exp = parpser.parseExpression("#listdata[1]='666666'");
EvaluationContext context=new StandardEvaluationContext();
context.setVariable("listdata", list);
System.out.println(list);
}
}
实际上在Spring又考虑到集合数据的批量处理问题,所以此处也可以对集合数据内容进行处理,
范例:处理list集合
package cn.zwb.demo;
import java.util.ArrayList;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
List<String> list = new ArrayList<String>();
list.add("啦啦啦");
list.add("fewfe");
//但是现在处理完成之后改变的并不是已有的集合,已有的集合不会发生变化
Expression exp = parpser.parseExpression("#listdata.!['你好:' + #this]");
EvaluationContext context=new StandardEvaluationContext();
context.setVariable("listdata", list);
System.out.println(exp.getValue(context));//相当于这是一个新的集合,
System.out.println(list);
}
}
修改完成之后相当于重新创建了一个新的List集合,
在整个过程里面不要忘记了,Map集合也可以进行处理.
范例:处理Map集合
略
实际上在整个表达式的操作之中也提供有数据的筛选操作支持.
范例:数据的筛选操作
package cn.zwb.demo;
import java.util.ArrayList;
import java.util.List;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class TestELSimple {
public static void main(String[] args) throws NoSuchMethodException, SecurityException {
ExpressionParser parpser = new SpelExpressionParser();
List<String> list = new ArrayList<String>();
list.add("啦啦啦");
list.add("fewfe");
//但是现在处理完成之后改变的并不是已有的集合,已有的集合不会发生变化
Expression exp = parpser.parseExpression("#listdata.?[#this=='fewfe']");
EvaluationContext context=new StandardEvaluationContext();
context.setVariable("listdata", list);
System.out.println(exp.getValue(context));//相当于这是一个新的集合,
System.out.println(list);
}
}
整个筛选的过程里面就可以进行各种类方法的调用(主要是String类的支持方法).