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类的支持方法)。
15-spring学习-集合表达式的更多相关文章
- Spring学习--集合属性
Spring 中可以通过一组内置的 xml 标签(例如: <list> , <set> 或 <map>) 来配置集合属性. 配置java.util.Set 需要使用 ...
- Spring学习-- SpEL表达式
Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{...} 作为定界符 , 所有在大括号中的字符都将被认为是 SpE ...
- Spring学习总结(四)——表达式语言 Spring Expression Language
SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用 ...
- JavaSE学习总结第15天_集合框架1
15.01 对象数组的概述和使用 public class Student { // 成员变量 private String name; private int age; // 构造方法 publ ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- 我的Spring学习记录(二)
本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...
- Spring定时器corn表达式详解
1.结构 Spring定时器corn表达式详解 2.各字段的含义 字段 允许值 允许的特殊字符 秒 0~59 - * / 分 0~59 - * / 小时 0~23 - * / 日期 1~31 - * ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- spring学习12 -Spring 框架模块以及面试常见问题注解等
以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...
随机推荐
- SpringBoot 解决时区问题
SpringBoot 解决时区问题 1.在启动类加上 @PostConstruct void setDefaultTimezone() { TimeZone.setDefault(TimeZone.g ...
- python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
python3.5安装报错 python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open sha ...
- python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctype ...
- Educational Codeforces Round 10 D. Nested Segments 离线树状数组 离散化
D. Nested Segments 题目连接: http://www.codeforces.com/contest/652/problem/D Description You are given n ...
- Codeforces Round #299 (Div. 1) A. Tavas and Karafs 水题
Tavas and Karafs Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/536/prob ...
- hdu 4112 Break the Chocolate 贪心
Break the Chocolate Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem. ...
- php 安装 Redis 扩展
开发环境安装包为:wamp3.1.0,安装成功后 wamp/bin 目录下有php以下几个版本: 这里以php7.1.9为例进行redis扩展安装,其他php版本也是一样的. 进行安装 step 1: ...
- [Win32]创建模态窗口
http://www.cnblogs.com/zplutor/archive/2011/02/20/1958973.html 在Win32编程中,如果要显示一个模态窗口,一般是先创建对话框模板,然后使 ...
- Spring EL bean引用实例
在Spring EL,可以使用点(.)符号嵌套属性参考一个bean.例如,“bean.property_name”. public class Customer { @Value("#{ad ...
- 前端必备工具-Emmet (Zen Coding)
Emmet 可以快速的编写 HTML 和 CSS,输入指令如: ul#nav>li*4>a*4 敲击一下TAB 键,就会输出: <ul id="nav"> ...