zoukankan      html  css  js  c++  java
  • 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类的支持方法)。

  • 相关阅读:
    css3中-moz、-ms、-webkit 是什么意思
    自定义AppServer
    自定义AppSession
    分离Command
    创建简单的Telnet实例
    注册表权限设置
    centos root登录password 忘记解决的方法
    ajaxFileUpload+struts2实现多文件上传
    计算机图形学(二)输出图元_6_OpenGL曲线函数_2_中点画圆算法
    linux命令的别名alias,unalias
  • 原文地址:https://www.cnblogs.com/alsf/p/8138291.html
Copyright © 2011-2022 走看看