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

15-spring学习-集合表达式的更多相关文章

  1. Spring学习--集合属性

    Spring 中可以通过一组内置的 xml 标签(例如: <list> , <set> 或 <map>) 来配置集合属性. 配置java.util.Set 需要使用 ...

  2. Spring学习-- SpEL表达式

    Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括号中的字符都将被认为是 SpE ...

  3. Spring学习总结(四)——表达式语言 Spring Expression Language

    SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用 ...

  4. JavaSE学习总结第15天_集合框架1

      15.01 对象数组的概述和使用 public class Student { // 成员变量 private String name; private int age; // 构造方法 publ ...

  5. 不错的Spring学习笔记(转)

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  6. 我的Spring学习记录(二)

    本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...

  7. Spring定时器corn表达式详解

    1.结构 Spring定时器corn表达式详解 2.各字段的含义 字段 允许值 允许的特殊字符 秒 0~59 - * / 分 0~59 - * / 小时 0~23 - * / 日期 1~31 - * ...

  8. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  9. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...

随机推荐

  1. JDK源码(1.7) -- java.util.Arrays

    java.util.Arrays 源码分析 ------------------------------------------------------------------------------ ...

  2. Apache -- 利用.htaccess防盗链

    在Apache服务器的前提下利用.htaccess文件来防盗链的原理是通过检查图片或文件请求头信息中的Referer属性(也就是请求的来源),判断它是否属于你所规定的合法的请求来源,从而实现让合法来源 ...

  3. Dual-polarity supply provides ±12V from one IC

    LT1961 升压型稳压器造就了兼具升压和降压能力的扁平状SEPIC Transformerless dc/dc converter produces bipolar outputs Well-reg ...

  4. ZEN056V130A24LS/ZEN132V130A24LS TVS 二极管 - 瞬态电压抑制器 5.6V/13.2V 保护

  5. 采集音频和摄像头视频并实时H264编码及AAC编码[转]

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  6. 检查正则表达式的工具:Regex Match Tracer

    Regex Match Tracer破解版下载 使用: 相关: 收藏几个好用的在线正则验证网

  7. 第一篇 对Javascript中原型的深入理解

      理解原型对象 在Javascript中不管什么时候,仅仅要创建一个新的函数,就会依据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象(这个对象的用途是包括能够有特定 ...

  8. Tui-x 基础使用

    本章以Tui-x3.x仓库里的HelloTuiCpp项目来做具体解说.[ 由于HelloTuiCpp里面演示的全部控件,本文篇幅有限,不能一一说明,所以仅仅能列举两个控件,后面的文章会有针对性地解说其 ...

  9. [Android Pro] 有关Broadcast作为内部类时注册的一些问题

    很经常Broadcast都会写成一个Activity或者Service的内部类.这时候的注册和普通有点小区别. 有两种情况 1.假如是再Manifest文件里面静态注册的话,需要注意. ex: < ...

  10. Python学习(七)面向对象 ——类和实例

    Python 面向对象 —— 类和实例 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请 ...