spring认为,数组和List集合是等价的。
要想操作list集合,利用“{内容,内容...}”的形式就可以完成了(类似数组)。
package com.Spring.ELDemo; 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 TestSimple3 { public static void main(String[] args) throws Exception { ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("{100,200,300}"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue(context)); } }
效果:
如果只想定义一个空的集合,直接设置未"{ }"。
但是此时这个List集合,相当于使用了Collections类,这个工具类下面可以创建空集合,但是许多方法不支持实现。
如果真定义了集合,可以使用表达式使用索引的访问
范例:索引访问集合
package com.Spring.ELDemo; 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 TestSimple3 { public static void main(String[] args) throws Exception { ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("{100,200,300}[1]"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); System.out.println(exp.getValue(context)); } }
以上没有意义的,真实开发,往往将集合设置为操作的变量。
范例:设置集合内容
package com.Spring.ELDemo; import java.util.ArrayList; import java.util.List; 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 TestSimple3 { public static void main(String[] args) throws Exception { List<String> all=new ArrayList<String>(); all.add("hello"); all.add("world"); ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("#allData[1]"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context)); } }
结果:
以上操作的是List集合,既然是集合,那么Set集合肯定也能设置。
范例:观察set集合配置
package com.Spring.ELDemo; import java.util.HashSet; import java.util.Set; 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 TestSimple3 { public static void main(String[] args) throws Exception { Set<String> all=new HashSet<String>(); all.add("hello"); all.add("world"); ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("#allData[1]"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context)); } }
结果:
范例:Map集合配置
package com.Spring.ELDemo; import java.util.HashMap; import java.util.Map; 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 TestSimple4 { public static void main(String[] args) throws Exception { Map<String,String> all=new HashMap<String,String>(); all.put("hello","你好"); all.put("world","世界"); ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("#allData['world']"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context)); } }
除了数据的设置,还能进行数据的修改
范例:List集合数据的修改
package com.Spring.ELDemo; import java.util.ArrayList; import java.util.List; 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 TestSimple3 { public static void main(String[] args) throws Exception { List<String> all=new ArrayList<String>(); all.add("hello"); all.add("world"); ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("#allData[1]='世界' "); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context)); System.out.println(all); } }
结果:
范例:修改Map集合
package com.Spring.ELDemo; import java.util.HashMap; import java.util.Map; 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 TestSimple4 { public static void main(String[] args) throws Exception { Map<String,String> all=new HashMap<String,String>(); all.put("hello","你好"); all.put("world","世界"); ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("#allData['world']='欢迎进入世界'"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context)); System.out.println(all); } }
结果:
Spring考虑到了批量处理集合数据问题。
范例:处理List集合
比如,给List集合里面的内容前面加上一个“您好”:
package com.Spring.ELDemo; import java.util.ArrayList; import java.util.List; 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 TestSimple5 { public static void main(String[] args) throws Exception { List<String> all=new ArrayList<String>(); all.add("hello"); all.add("world"); ExpressionParser parser=new SpelExpressionParser(); //但是现在处理完成后改变的并不是已有的集合,已有的集合不会发生变化, Expression exp=parser.parseExpression("#allData.!['你好:'+#this] "); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context));//这是一个新的集合 System.out.println(all); } }
输出结果:
可见,原有集合并没有改变,修改完成后相当于创建了一个新的List集合
范例:处理Map集合
比如,获取,key--value形式内容
package com.Spring.ELDemo; import java.util.HashMap; import java.util.Map; 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 TestSimple6 { public static void main(String[] args) throws Exception { Map<String,String> all=new HashMap<String,String>(); all.put("hello","你好"); all.put("world","世界"); ExpressionParser parser=new SpelExpressionParser(); Expression exp=parser.parseExpression("#allData.![#this.key+'--'+#this.value]"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context)); System.out.println(all); } }
输出结果:
这里将Map集合中的key和value进行了处理, 所以处理完的也就是单值的数据,也就是形成了新的List集合操作的数据。
集合表达式也提供了数据筛选操作的支持
范例:数据的筛选操作
查询map集合中key值为world的集合
package com.Spring.ELDemo; import java.util.HashMap; import java.util.Map; 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 TestSimple7 { public static void main(String[] args) throws Exception { Map<String,String> all=new HashMap<String,String>(); all.put("hello","你好"); all.put("world","世界"); ExpressionParser parser=new SpelExpressionParser(); //或者:"#allData.?[#this.key=='world']" Expression exp=parser.parseExpression("#allData.?[#this.key.contains('world')]"); //利用StandardEvaluationContext类进行方法的引用注册 StandardEvaluationContext context=new StandardEvaluationContext(); context.setVariable("allData", all); System.out.println(exp.getValue(context)); System.out.println(all); } }
结果:
整个筛选过程里面,就可以调用各种类的方法,(主要是String类的支持方法)。