如何在Groovy中通过嵌套映射的值查找映射键

如何在Groovy中通过嵌套映射的值查找映射键,groovy,Groovy,我有一个映射,在Groovy中另一个映射作为它的值 例如: [K1 : [k2:v2]] 现在我想使用K1键查找v2,并且必须返回K1 我正在使用。每个循环但是。每个循环都会继续运行,直到结束,即使我在其间返回K1 此外,我还得到了作为返回值的整个映射,尽管我只希望得到K1键。名称所示的每个方法总是通过每个元素,闭包的返回值被忽略,返回值也是您观察到的完整映射。这是每个的定义行为 您想要使用的是find方法,该方法查找符合您的标准的第一个条目,然后使用其类似于键的键。比如: [K1: [k2:

我有一个映射,在Groovy中另一个映射作为它的值

例如:

[K1 : [k2:v2]]
现在我想使用
K1
键查找
v2
,并且必须返回
K1

我正在使用
。每个
循环但是
。每个
循环都会继续运行,直到结束,即使我在其间返回
K1


此外,我还得到了作为返回值的整个映射,尽管我只希望得到
K1
键。

名称所示的
每个
方法总是通过每个元素,闭包的返回值被忽略,返回值也是您观察到的完整映射。这是每个的定义行为

您想要使用的是
find
方法,该方法查找符合您的标准的第一个条目,然后使用其类似于键的键。比如:

[K1: [k2: 'v2'], K3: [k4: 'v4']].find { it.value.k2 == 'v2' }.key
您可以检查以下内容:

[K1: [k2: 'v2'], K3: [k4: 'v4']].find {'v2' in it.value.values() }?.key

下次还请发布您遇到问题的实际代码,而不仅仅是文字描述。您不是(从这个
it.value.k2
)假设每个地图都有一个键
k2
?我相信他需要
[K1:[k2:'v2'],K3:[k4:'v4']]。如果没有这样的键,结果是
null
,因此与
v2
不相等。同意,但OP的问题中没有任何地方要求他基于
k2
进行搜索。因为他没有发布他最初的尝试,我不知道他的确切意图是什么。我的代码片段只是
find
用法的一个示例。确切的标准是他需要什么取决于他。在这种情况下,涵盖所有问题的更通用的解决方案将是
[K1:[k2:'v2'],K3:[k4:'v4']]。在其中查找{v2'。value.values()}.key
。只是另一种方法。:)