在 Map 中访问 Sets 中的值

Accessing values in Sets within a Map

我目前已经初始化了一个新地图。在该地图中,我已经初始化了 3 个集合。

myMainMap = [disk:[], build:[], commits:[]]

我有一个函数可以从 git 中获取某些值,输出如下:

rev = 97sdf9s7fs7896fs0d7fs0
remoteUrl = ssh://git@my-repo:5000/test/project
branch = (7s8a6)

然后将其添加到 myMainMap

中的集合 commits
def commitInfo = [repository: remoteUrl, commit: rev, branch: branch]
myMainMap['commits'].add(commitInfo)

所以现在 myMainMap 看起来像 :

[images:[], buildEnv:[], commits:[[commit:97sdf9s7fs7896fs0d7fs0, repository:ssh://git@my-repo:5000/test/project, branch:(7s8a6)]]]

现在我需要从这个 Set 中提取 commitrepositorybranch 的值,它是 inside一个地图,然后 运行 一个 assert 在这些值上。

我可以运行这样断言:

assert myMainMap.containsValue([[commit:"97sdf9s7fs7896fs0d7fs0", repository:"ssh://git@my-repo:5000/test/project", branch:"(7s8a6)"]])

但这是对 Set 的断言,而不是键的各个值。 此外,这仅在键值位于 "" 而不是 []

内时有效

那么,提取 Map 中的 Set 中的键值的最有效方法是什么?

请参阅以下代码段的最后一行。它仅使用 rev.

进行您想要的检查

myMainMap.commits*.commit 为您提供所有 rev 哈希的列表。

解释了 groovy 的扩展运算符特征 here

def myMainMap = [disk:[], build:[], commits:[]]

def rev = '97sdf9s7fs7896fs0d7fs0'
def remoteUrl = 'ssh://git@my-repo:5000/test/project'
def branch = '(7s8a6)'

def commitInfo = [repository: remoteUrl, commit: rev, branch: branch]
myMainMap.commits.add(commitInfo)

//below line does the contains check in your commit list inside the map
assert myMainMap.commits*.commit.contains('97sdf9s7fs7896fs0d7fs0')