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. Djangio笔记

    django图解 新创建一个项目后的目录层级

  2. sqlserver -- 学习笔记(一)自定义函数(学习总结,备忘)

    SQL Server自定义函数,以前只在书上看过,没有动手去敲一敲,今天刚好接触到,看了几篇博文学习了下.做好备忘很重要!! (@_@)Y Learn from:http://www.cnblogs. ...

  3. [转]java中Collections.sort排序详解

      Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e, ...

  4. 几种OutOfMemoryError

    JAVA虚拟机OutOfMemoryError主要包括以下四类:java.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryErro ...

  5. react-native-communications 电话、短信、邮件、浏览器

    第一种方法:Linking:调用系统的电话.短信.邮件.浏览器等功能 Linking.canOpenURL(this.props.url).then(supported => { if (!su ...

  6. localhost与127.0.0.1的区别 2

    localhost与127.0.0.1的区别localhost与127.0.0.1的区别是什么?相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析.看来这个 ...

  7. jQuery向父辈遍历的方法

      通过DOM树可以可容易的访问到html文档中的所有元素 例如向上访问父辈的元素有以下方法 1.parent()方法可以得到所定元素的直接父元素 $("span").parent ...

  8. 由 12306.cn 谈谈高并发+高负载网站性能技术

    12306.cn 网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有限的经验和了解, 所以,如果有什么问题还请大家一起讨论 ...

  9. 一个 MVC 框架以 MVVM 之「魂」复活了!

    GitHub: https://github.com/houfeng/mokit Mokit 最初编写于 2012 年,是一个面向移动应用的前端 mvc 框架,v3 版本进行了大量的重构或重写,并尽可 ...

  10. [Android 源码] Android源码下载

    Android源码下载 为了能够顺利的下载Android的源码,同时也为了避免在网络上再次搜寻如何下载源码的麻烦,我把下载过程记录在这篇文档中. 官网中也有详细的介绍: http://source.a ...