(二十一)集合表达式

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


猜你喜欢

转载自blog.csdn.net/qq1019648709/article/details/80508119