我想用;分隔符拆分以下查询字符串并转换为地图。这样我就可以使用密钥访问值 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 中实现这一点?
我知道的最短版本是这样的:
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)最后,您从查询字符串中获得一个地图,您可以通过键轻松访问每个地图条目。