Groovy~Groovy的Map操作
Map方法
- containsKey():此映射是否包含此键
- get():查找此Map中的键并返回相应的值,如果此映射中没有键的条目,则返回null
- keySet():获取此映射中的一组键
- put():将指定的值与此映射中的指定键相关联。如果此映射之前包含此键的映射,则旧值将替换为指定的值
- size():返回此Map种键值映射的数量
- values():返回此地图中包含的值的集合视图
一、基础操作
def Map = [key1:value1,key2:value2,key3:value3]
:定义MapMap.get(key)
:获取Map中key的值Map.get[key]
:获取Map中key的值Map.getClass()
:获取Map的类Map.size()
:获取Map中元素的个数Map.put(key,value)
:向Map中添加元素
class FirstTest{static void main(String[] args) {def map = [name: 'Gromit', likes: 'cheese', id:1234]println map.get('name')println map.get('id')println map['name']println map['id']println map.getClass()def emptyMap = [:]println emptyMap.size()emptyMap.put('foo',5)println emptyMap.size()println emptyMap.get('foo')}
}
- Map中,
[a:1]
等价于['a':1]
class FirstTest{static void main(String[] args) {def a = 'Bob'def ages = [a: 43]// 找不到Bobprintln ages['Bob']// 因为a是字面值(文本)println ages['a']// 将a用()括起来ages = [(a):43]// 这时就能找到Bob的值了println ages['Bob']}
}
Map.clone()
:对Map进行浅拷贝
class FirstTest{static void main(String[] args) {def map = ['simple' : 123,'complex' : [a: 1, b: 2]]def map2 = map.clone()println map2.get('simple')println map2.get('complex')map2.get('complex').put('c',3)println map}
}
二、属性符号
class FirstTest{static void main(String[] args) {def map = ['name': 'Gromit', 'likes': 'cheese', id:1234]println map.classprintln map.get('class')println map.getClass()map = [1: 'a',(true): 'p',(false): 'q',(null): 'x','null': 'z']// 数字1不是一个标识符,所以得这样调用println map.containsKey(1)println map.trueprintln map.get(true)println map.falseprintln map.get(false)println map.nullprintln map.get(null)}
}
三、迭代
Map.each{键值对 -> 执行语句}
Map.eachWithIndex{键值对,i -> 执行语句}
Map.each{键,值 -> 执行语句}
Map.eachWithIndex{键,值,i -> 执行语句}
class FirstTest{static void main(String[] args) {def map = ['Bob': 42,'Alice': 54,'Max': 33]map.each{entry ->println "Name: $entry.key Age: $entry.value"}map.eachWithIndex { entry, i ->println "$i - Name: $entry.key Age: $entry.value"}map.each { key, value ->println "Name: $key Age: $value"}map.eachWithIndex{ key, value, i ->println "$i -Name: $key Age: $value"}}
}
四、增加元素
Map.put(key,value)
:向Map中添加一个元素Map[key] = value
:向Map中添加一个元素Map1.putAll(Map2)
:向Map1中添加Map2的所有元素
class FirstTest{static void main(String[] args) {def defaults = [1: 'a', 2: 'b', 3: 'c', 4: 'd']def overrides = [2: 'z', 5: 'x', 13: 'x']defaults.put(15,'t')defaults[17] = 'u'defaults.putAll(overrides)println defaults}
}
五、删除元素
Map.clear
:清空Map中的所有元素
class FirstTest {static void main(String[] args) {def m = [1: 'a', 2: 'b']println m.get(1)m.clear()println m}
}
六、不能使用GString作为Map的键
class FirstTest {static void main(String[] args) {def key = 'some key'def map = [:]def gstringKey = "${key.toUpperCase()}"map.put(gstringKey, 'value')println map.get('SOME KEY')}
}
七、keys、values、entries
Map.keySet
:返回Map中的所有keyMap.valueSet
:返回Map中所有valueMap.entrySet
:返回Map中所有的entry
class FirstTest {static void main(String[] args) {def map = [1: 'a', 2: 'b', 3: 'c']def entries = map.entrySet()entries.each{ entry ->println entry.keyprintln entry.value}def keys = map.keySet()println keys}
}
八、过滤和搜索
Map.find{条件}
:按照条件查找单个entryMap.findAll{条件}
:按照条件查找所有的entryMap.every{条件}
:如果所有的entry都符合条件就返回trueMap.any{条件}
:如果有一个entry符合条件就返回true
class FirstTest{static void main(String[] args) {def people = [1: [name:'Bob', age:32, gender:'M'],2: [name:'Johnny', age:36, gender:'M'],3: [name:'Claire', age:21, gender:'F'],4: [name:'Amy', age:54, gender:'F']]// 查找单个entrydef bob = people.find{it.value.name == 'Bob'}def females = people.findAll{it.value.gender == 'F'}// 两个都是返回entries,但是可以使用collect来检索年龄def ageOfBob = bob.value.agedef ageOfFemales = females.collect{it.value.age}println ageOfBobprintln ageOfFemales// 但您也可以使用键/值作为闭包的参数def agesOfMales = people.findAll{id,person -> person.gender == 'M'}.collect{id, person -> person.age}println agesOfMales// every,如果所有entries都匹配规则,则返回trueprintln people.every{id,person -> person.age > 18}// any,如果任何一个entry匹配规则,则返回trueprintln people.any{id,person -> person.age == 54}}
}
九、分组
Map.groupBy{条件}
:将Map按照条件分组
class FirstTest{static void main(String[] args) {println([[name:'Clark',city:'London'],[name:'Sharma',city:'London'],[name:'Maradona',city:'LA'],[name:'Zhang',city:'HK'],[name:'Ali',city:'HK'],[name:'Liu',city:'HK']].groupBy{it.city})}
}
Groovy~Groovy的Map操作相关推荐
- php groovy,Groovy
假设我有以下结构: Map> nestedMap = [ "x": ["a": 2, "b": 3, "c": 4 ...
- 解决升级Spark2.0之后,DataFrame map操作报错
当我们在使用spark1.6的时候,当我们创建SQLContext读取一个文件之后,返回DataFrame类型的变量可以直接.map操作,不会报错.但是升级之后会包一个错误,如下: 报错:No imp ...
- TypeScript里数组foreach和map操作的区别
如果map操作里的返回值没有被使用,那么map可以被forEach替换.
- python学习笔记 -- map() 操作可迭代序列
''' map:操作可迭代序列1.函数作为参数2.lambda表达式作为参数 ''' #============== 函数作为参数 =============== #map(func或lambda, ...
- Java8 Stream接口流式方法:map操作、filter操作以及flatMap操作
点击关注公众号,利用碎片时间学习 关于stream 流式操作,在rt.jar 包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明 ...
- Groovy~Groovy介绍
一.什么是Groovy Groovy的官方网站 Groovy是一种基于Java平台的面向对象语言 二.Groovy的特点 同时支持静态和动态类型 支持运算符重载 本地语法列表和关联数组 对正则表达式的 ...
- lambda表达式——Stream管道流的map操作
lambda表达式--Stream管道流的map操作 一.回顾Stream管道流map的基础用法 二.处理非字符串类型集合元素 三.再复杂一点:处理对象数据格式转换 四.flatMap 一.回顾Str ...
- groovy附件存mysql_Groovy 操作mysql数据库
Groovy 操作mysql数据库例子,Groovy 操作数据库 import groovy.sql.Sql class MyGroovy { static void main(args) { def ...
- 使用Groovy代码执行本地操作系统命令的方法
看个例子,我在Groovy项目文件夹所在目录执行dir,得到如下输出: 现在我希望用Groovy代码实现这个dir命令的执行效果,代码如下: def process = "cmd /c di ...
最新文章
- 洛谷 P3302 [SDOI2013]森林 主席树+启发式合并
- oracle 唯一递增列,在oracle中创建unique唯一约束(单列和多列)
- 《玩转git三剑客》笔记
- [leetcode] 230. Kth Smallest Element in a BST 找出二叉搜索树中的第k小的元素
- Bellman-Ford算法
- 经典C语言程序100例之十
- Python3 基础学习笔记 C05【字典】
- pcb布线拐角处打地孔_PCB线路板布线的10个重要规则——公众号【深圳LED网】
- 报错,void AcceptAndReadAvailableTracks(const QString param, int timeout)
- c++ sleep函数_C ++ strcpy()和strncpy()函数
- cmake 简介-初识
- php ci框架结构,CI框架目录结构分析
- java生产消费线程小例子
- 《无敌大冒险》技术支持
- 台式计算机常用总线,计算机中常见的总线有哪些
- Andorid11 暗码启动应用(一)
- 永磁同步电机数学模型
- openstack-ocata版本nova MQ(rpc)接收端(server)浅析
- SkyWalking告警
- stm32F105的Canable开源usb-can项目