7

Groovy语境下的Map

 3 years ago
source link: https://blog.51cto.com/FunTester/5580725
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Groovy语境下的Map

精选 原创

FunTester 2022-08-16 10:03:19 博主文章分类:FunTester ©著作权

文章标签 java 赋值 运算符 文章分类 软件测试 软件研发 阅读数214

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原创专题集锦


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK