如何在 Groovy 中将查询字符串转换为 Map

lea*_*ovy 2 groovy

我想用;分隔符拆分以下查询字符串并转换为地图。这样我就可以使用密钥访问值 iPhone、6s Plus 和 2016。

def query = type=iPhone;modelName=6s Plus;year=2016
def result = query .split(';')
println result
Run Code Online (Sandbox Code Playgroud)

我想访问这样的值 - result.getAt('type'), result.getAt('modelName')

我尝试了以下方法 - 但它没有按预期工作

Map<String,String> response = result.collectEntries{
        [
            it.type,
            it.modelName,
            it.year
        ]
    }
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 Groovy 中实现这一点?

Szy*_*iak 5

我知道的最短版本是这样的:

def query = 'type=iPhone;modelName=6s Plus;year=2016'

def map = query.tokenize(';')*.tokenize('=').collectEntries()

println map.modelName // => 6s Plus
Run Code Online (Sandbox Code Playgroud)

深度算法:

  • 第一个标记化将输入字符串拆分为 3 个字符串的列表

    ['type=iPhone', 'modelName=6s Plus', 'year=2016']
    
    Run Code Online (Sandbox Code Playgroud)
  • 接下来,我们对该列表中的每个元素调用 tokenize 以将其=作为分隔符拆分为两个字符串元素的列表,例如:

    [['type', 'iPhone'], ['modelName', '6s Plus'], ['year', '2016']]
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后我们调用collectEntries()- 如果没有传递参数,它需要一个大小为 2 的列表,其中第一个元素是键,第二个元素是映射条目的值

    ['type':'iPhone', 'modelName':'6s Plus', 'year':'2016']
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后,您从查询字符串中获得一个地图,您可以通过键轻松访问每个地图条目。