只要是开发框架的操作,永远都不可避免的要去进行集合数据的操作处理,在之前一直强调过,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类的支持方法).