如何使用find来搜索hashmaps列表

时间:2018-01-22 06:18:59

标签: json groovy

在groovy中我有一个哈希映射列表。

如果我想在此地图中搜索/获取一个子类型和域名组合的记录,我该怎么办?附:地图中可能会有更多属性,但为了简单起见,我没有将它们包括在内。

[{
    "subtype__c": "SUBTYPE_ONE",
    "domain__c": "DOMAIN_ONE"
}, {
    "subtype__c": "SUBTYPE_TWO",
    "domain__c": "DOMAIN_TWO"
}, {
    "subtype__c": "SUBTYPE_THREE",
    "domain__c": "DOMAIN_THREE"
}, {
    "subtype__c": "SUBTYPE_FOUR",
    "domain__c": "DOMAIN_FOUR"
}]

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  • 使用搜索crieteria定义地图
  • 使用JsonSlurper
  • 解析数据
  • 使用find搜索
def filterCriteria = [subtype__c: 'SUBTYPE_ONE', domain__c: 'DOMAIN_ONE']

def jsonString = """[{
    "subtype__c": "SUBTYPE_ONE",
    "domain__c": "DOMAIN_ONE"
}, {
    "subtype__c": "SUBTYPE_TWO",
    "domain__c": "DOMAIN_TWO"
}, {
    "subtype__c": "SUBTYPE_THREE",
    "domain__c": "DOMAIN_THREE"
}, {
    "subtype__c": "SUBTYPE_FOUR",
    "domain__c": "DOMAIN_FOUR"
}]"""

def json = new groovy.json.JsonSlurper().parseText(jsonString)

println json.find{it == filterCriteria}

您可以在线快速尝试 demo

答案 1 :(得分:0)

您可以尝试以下代码。

List<Map<String, String>> list = [
    ["subtype": "s1", "domain": "d1"],
    ["subtype": "s2", "domain": "d2"],
]
list.find({ Map<String, String> map -> map["subtype"] == "s1" && map["domain"] == "d1"})

如果有可能找到多个这样的地图,那么使用&#34; findAll&#34;代替。

List<Map<String, String>> found = list.findAll({ Map<String, String> map -> map["subtype"] == "s1" && map["domain"] == "d1"})