我想用 ;
分隔符拆分下面的查询字符串并转换为 map 。这样我就可以使用 key 访问值 iPhone、6s Plus 和 2016。
def query = type=iPhone;modelName=6s Plus;year=2016
def result = query .split(';')
println result
我想像这样访问值 - result.getAt('type'), result.getAt('modelName')
我尝试了以下方法 - 但它没有按预期工作
Map<String,String> response = result.collectEntries{
[
it.type,
it.modelName,
it.year
]
}
我如何在 Groovy 中实现这一点?
最佳答案
我知道的最短版本如下所示:
def query = 'type=iPhone;modelName=6s Plus;year=2016'
def map = query.tokenize(';')*.tokenize('=').collectEntries()
println map.modelName // => 6s Plus
算法深入:
第一个标记化将输入字符串拆分为 3 个字符串的列表
['type=iPhone', 'modelName=6s Plus', 'year=2016']
接下来,我们对该列表中的每个元素调用标记化,以使用
=
作为两个字符串元素列表的分隔符将其拆分,例如:[['type', 'iPhone'], ['modelName', '6s Plus'], ['year', '2016']]
最后我们调用
collectEntries()
- 如果没有传递任何参数,它需要一个大小为 2 的列表,其中第一个元素是一个键,第二个元素是一个值 map 入口['type':'iPhone', 'modelName':'6s Plus', 'year':'2016']
最后,您从查询字符串中得到一个 map ,您可以简单地按键访问每个 map 条目。
关于groovy - 如何在 Groovy 中将查询字符串转换为 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51902144/