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

标签 groovy

我想用 ; 分隔符拆分下面的查询字符串并转换为 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/

相关文章:

java - 使用特定的 "Root"对象在 Java 中执行 Groovy 脚本

java - Groovy/Java - JSON - 通过可变路径更新 JSON

android - android dexDebug或dexRelease任务后如何执行gradle任务

jenkins - 如何将Groovy变量用于Extended Choice Jenkins插件?

groovy - 使用javac进行编译时发生编译错误| Groovy

Groovy 扩展元类

spring-boot - Wiremock 请求模式与请求参数匹配

multithreading - Gpars withExistingPool 错误 jsr166y.ForkJoinPool 未找到

Groovy:this.metaClass 与 instance.metaClass

grails - 创建自定义Grails Tag Lib生成代码