【问题标题】:How to convert query string to Map in Groovy如何在 Groovy 中将查询字符串转换为 Map
【发布时间】:2018-08-17 20:00:16
【问题描述】:

我想用; 分隔符拆分下面的查询字符串并转换为地图。这样我就可以使用密钥访问值 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 中实现这一点?

【问题讨论】:

标签: groovy


【解决方案1】:

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

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']
    
  • 接下来,我们对该列表中的每个元素调用 tokenize 以使用 = 作为分隔符将其拆分为两个字符串元素的列表,例如:

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

    ['type':'iPhone', 'modelName':'6s Plus', 'year':'2016']
    
  • 最后,您从查询字符串中得到一个地图,您可以简单地按键访问每个地图条目。

【讨论】:

    【解决方案2】:
    def x = "type=iPhone;modelName=6s Plus;year=2016"
    def m = x.split(';').collectEntries{it.split('=') as List}
    println m.modelName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2018-11-03
      • 2010-12-15
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多