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中被用的比较 ...
随机推荐
- bzoj 2428: [HAOI2006]均分数据 随机化
2428: [HAOI2006]均分数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- PHP简单利用 token 防止表单重复提交
<?php /* * 隐藏一个可变的token,每次提交都需要和服务器校对 */ session_start(); function set_token() { $_SESSION['token ...
- CentOS 6.9/7通过yum安装指定版本的PostgreSQL
PostgreSQL(10+) 一.安装PostgreSQL // 安装EPEL源 # wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel- ...
- ASM相关视图
oracle asm对于我们并非一个黑盒子 ,我们能够通过对应视图查看asm instance信息,和oracle系统视图一样. v$asm_diskgroup x$kfgrp 记录diskgrou ...
- JQuery 关于位置的计算(重要)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- NHibernate使用无状态Sessions
NHibernate 3.0 Cookbook第三章,Using stateless sessions的翻译. 当要处理大量的数据,你通常可能会使用更"底层"的API来改善性能,在 ...
- u-boot中环境变量的实现
转载:http://blog.chinaunix.net/uid-28236237-id-3867041.html U-boot中通过环境参数保存一些配置,这些配置可以通过修改环境参数.保存环境参数. ...
- jdbc分页
分页是一个被讲到烂掉的话题,今天我再拾起来踹几脚吧 (Hibernate的分页做得很好很强大,用的人都知道 ,这个就不用再说了) 1.为什么要分页? 首先是数据量太大会影响查询和传输的性能,关键 ...
- mormot解析天气预报JSON数据
mormot解析天气预报JSON数据 uses SynCommons; constjson2 = '{' + #13#10 +'"error":0,' + #13#10 +'&qu ...
- 【mybatis】mysql级联更新两个表或多张表的数据
例如 info表和relation表有关联,现在要在一个sql语句中同时级联更新两张表的数据 update security_code_info info LEFT JOIN security_cod ...