写点什么

Groovy 语境下的 Map

作者:FunTester
  • 2022 年 8 月 16 日
    北京
  • 本文字数:1318 字

    阅读完需:约 4 分钟

Groovy 中的 Map,不仅兼容了 Java API 提供的各种功能,还拓展了许多特殊语法和功能方便测试人员在使用的过程中提高效率,更快地构建测试脚本。


下面我就从几个方面分享一下 Groovy Map 的神奇之处。

创建

Java 中通常创建一个 Map 的常用语法Map<Integer, Integer> map = new HashMap();。而在 Groovy 中,我们可以使用语法[k:v]来创建 Map。相当于给 Map 对象初始化赋值了,而且语法简洁了许多。


Groovy 创建 Map 语法def map = [:],同样我们可以在初始化赋值def map = [a:32,b:32043],Groovy 中默认使用的是java.util.LinkedHashMap类,如果我们想改成java.util.HashMap实现,可以使用 as 关键字def map = [a:32,b:32043] as HashMap

添加

让我们从定义一个 Map 开始def map = [:]


下面向 Map 中添加一组值map["FunTester"] = 32432


还可以使用.运算符完成这个操作map.FunTester = 32423


换句话说,Groovy 支持以类似 bean 的方式访问键值对。


如果我们的 key 是一个变量,可以使用下面的语法:


        def map = [(DEFAULT_STRING):432423]        map[DEFAULT_STRING] = 324324
复制代码


当然如果你足够熟悉 Groovy 的话,可以使用一下语法添加def map1 = map + [c: 324],是不是有点神奇,这个可以翻看我之前的文章Groovy重载操作符(终极版)

获取

有了添加的经验,我们可以总结 Groovy 中获取 value 的两种方式:


        def map = [a: 32, b: 32043] as HashMap        output(map.a)        output(map["a"])
复制代码

删除

首先我们想到的还是 Java API 提供的方法,这也是我自己常用的,不过当看完下面的演示,相信会有一部分人改变自己的看法。


        def map = [a: 32, b: 32043] as HashMap        def map1 = map - [a: 32]        output(map1)
复制代码


在 Groovy 中-运算符被重载成了删除功能,如果 key 和 value 不一致,那则不会被删除。如果后面 key-value 是多个,则相当于把每一个 key-value 遍历一遍。


如果我们想批量删除符合规则的元素,Groovy 完成胜任这项工作:


map.removeAll {it.value % 2 == 0}
复制代码


Groovy 还提供一个 API 来保留符合规则的元素:


map.retainAll {it.value % 2 == 1}
复制代码

遍历

对于 Groovy 遍历来讲,使用each准没错的,语法如下:


        map.each {            output("key:$it.key value:$it.value")        }
复制代码


如果我们还想获取节点的 index 信息的话,可是使用eachWithIndex,如下:


        map.eachWithIndex {entry, i ->            output("index:$i key:$entry.key value:$entry.value")        }
复制代码

过滤

这里有三种 API,分别是:


        map.grep {it.value == 32}        map.find {it.value == 32}        map.findAll {it.value > 0}
复制代码


其中第三种返回的是个 list,返回的是所有符合条件的。对于第一种来说,不常用,最重要的是 Intellij 并不支持语法提示,这会造成相当的困扰。


还有一部分更加复杂的 API,这里就不演示了。使用 Groovy 就是为了简洁提效,不需要为了学习而学习花式炫技的语法,一旦时过境迁,自己会对自己的代码感觉陌生。


FunTester原创专题集锦


阅读原文,跳转我的仓库地址

发布于: 刚刚阅读数: 3
用户头像

FunTester

关注

公众号:FunTester,800篇原创,欢迎关注 2020.10.20 加入

Fun·BUG挖掘机·性能征服者·头顶锅盖·Tester

评论

发布
暂无评论
Groovy语境下的Map_FunTester_InfoQ写作社区