Groovy Map如何根据字符串数组类型Value中的元素获取对应Key
问题原因分析
你之前的写法存在以下几类错误:
- 类型匹配错误:Map中每个键对应的值是
List<String>类型,第一版写法直接把List和单个String做相等判断,永远返回false,无法匹配到目标Entry - 语法逻辑错误:后续嵌套
find的写法,要么混淆了Map.Entry和List的API,要么括号不匹配,其中it["1"]是Map的按键取值语法,不能用在List类型的value上,运行时只会返回null,无法实现匹配逻辑
正确实现
单匹配场景(目标值仅对应一个键)
如果目标字符串只会出现在一个键对应的List中,直接用List的contains方法判断即可:
def targetValue = "2" // 可直接替换为你从自定义下拉字段获取的字符串值 def wishKey = maps.find { it.value.contains(targetValue) }?.key
注意加
?.安全调用符,避免找不到匹配值时报空指针异常
多匹配场景(目标值对应多个键)
如果存在多个键对应的List都包含目标值的情况,可以一次性取出所有符合条件的键:
def targetValue = "2" def matchedKeys = maps.findAll { it.value.contains(targetValue) }*.key
JIRA ScriptRunner 适配说明
你已经确认下拉字段返回值为String类型,直接把上述代码中的targetValue替换为字段取值即可,不需要额外做类型转换,硬编码的maps结构无需修改。
内容的提问来源于stack exchange,提问作者Iqlaas Ismail
相关产品推荐
相关产品推荐

