15-spring学习-集合表达式

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类的支持方法)。

 

posted @ 2017-12-28 23:23  美好的明天  阅读(599)  评论(0编辑  收藏  举报