Map方法

  • containsKey():此映射是否包含此键
  • get():查找此Map中的键并返回相应的值,如果此映射中没有键的条目,则返回null
  • keySet():获取此映射中的一组键
  • put():将指定的值与此映射中的指定键相关联。如果此映射之前包含此键的映射,则旧值将替换为指定的值
  • size():返回此Map种键值映射的数量
  • values():返回此地图中包含的值的集合视图

一、基础操作

  • def Map = [key1:value1,key2:value2,key3:value3]:定义Map
  • Map.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中的所有key
  • Map.valueSet:返回Map中所有value
  • Map.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{条件}:按照条件查找单个entry
  • Map.findAll{条件}:按照条件查找所有的entry
  • Map.every{条件}:如果所有的entry都符合条件就返回true
  • Map.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操作相关推荐

  1. php groovy,Groovy

    假设我有以下结构: Map> nestedMap = [ "x": ["a": 2, "b": 3, "c": 4 ...

  2. 解决升级Spark2.0之后,DataFrame map操作报错

    当我们在使用spark1.6的时候,当我们创建SQLContext读取一个文件之后,返回DataFrame类型的变量可以直接.map操作,不会报错.但是升级之后会包一个错误,如下: 报错:No imp ...

  3. TypeScript里数组foreach和map操作的区别

    如果map操作里的返回值没有被使用,那么map可以被forEach替换.

  4. python学习笔记 -- map() 操作可迭代序列

    ''' map:操作可迭代序列1.函数作为参数2.lambda表达式作为参数 ''' #============== 函数作为参数 =============== #map(func或lambda, ...

  5. Java8 Stream接口流式方法:map操作、filter操作以及flatMap操作

    点击关注公众号,利用碎片时间学习 关于stream 流式操作,在rt.jar 包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明 ...

  6. Groovy~Groovy介绍

    一.什么是Groovy Groovy的官方网站 Groovy是一种基于Java平台的面向对象语言 二.Groovy的特点 同时支持静态和动态类型 支持运算符重载 本地语法列表和关联数组 对正则表达式的 ...

  7. lambda表达式——Stream管道流的map操作

    lambda表达式--Stream管道流的map操作 一.回顾Stream管道流map的基础用法 二.处理非字符串类型集合元素 三.再复杂一点:处理对象数据格式转换 四.flatMap 一.回顾Str ...

  8. groovy附件存mysql_Groovy 操作mysql数据库

    Groovy 操作mysql数据库例子,Groovy 操作数据库 import groovy.sql.Sql class MyGroovy { static void main(args) { def ...

  9. 使用Groovy代码执行本地操作系统命令的方法

    看个例子,我在Groovy项目文件夹所在目录执行dir,得到如下输出: 现在我希望用Groovy代码实现这个dir命令的执行效果,代码如下: def process = "cmd /c di ...

最新文章

  1. 洛谷 P3302 [SDOI2013]森林 主席树+启发式合并
  2. oracle 唯一递增列,在oracle中创建unique唯一约束(单列和多列)
  3. 《玩转git三剑客》笔记
  4. [leetcode] 230. Kth Smallest Element in a BST 找出二叉搜索树中的第k小的元素
  5. Bellman-Ford算法
  6. 经典C语言程序100例之十
  7. Python3 基础学习笔记 C05【字典】
  8. pcb布线拐角处打地孔_PCB线路板布线的10个重要规则——公众号【深圳LED网】
  9. 报错,void AcceptAndReadAvailableTracks(const QString param, int timeout)
  10. c++ sleep函数_C ++ strcpy()和strncpy()函数
  11. cmake 简介-初识
  12. php ci框架结构,CI框架目录结构分析
  13. java生产消费线程小例子
  14. 《无敌大冒险》技术支持
  15. 台式计算机常用总线,计算机中常见的总线有哪些
  16. Andorid11 暗码启动应用(一)
  17. 永磁同步电机数学模型
  18. openstack-ocata版本nova MQ(rpc)接收端(server)浅析
  19. SkyWalking告警
  20. stm32F105的Canable开源usb-can项目

热门文章

  1. 点石互动--kyw之:30步,网站信任度提升200%
  2. TCP/IP-单播是如何实现的
  3. 编程萌新必看!初学C语言必会的知识点,你学废了吗?
  4. mysql 数据分组_详解MySQL 数据分组
  5. FPGA数字信号处理(二)并行FIR滤波器Verilog设计
  6. 重新注册组件修复IE
  7. git-lfs使用笔记
  8. 为知笔记 印象笔记 有道笔记 OneNote选择
  9. 有道笔记无法同步(笔录)
  10. 计算机网络的发展经历了几个阶段?每个阶段各有什么特点?