【问题标题】:How to pull value from a map如何从地图中提取价值
【发布时间】:2013-07-16 17:49:26
【问题描述】:

我有一张包含一堆值的地图

def mymap = [
"FOO" : "BAR",
"something" : "else"
]

我想根据键是否以我传递的内容开头来提取值。即

mymap.findAll(it.key.startsWith("FO")}

以上返回{FOO=BAR}

我怎样才能修改它以便我只得到值 BAR 回来?

我试过了,但我不想each,因为我知道它总是只有一个值

def val = ""
mymap.findAll(it.key.startsWith("FO")}.each{val = it.value}
assert val == "BAR"

【问题讨论】:

    标签: groovy


    【解决方案1】:

    你可以这样做:

    mymap.findAll { it.key.startsWith("FO") }.values()
    

    它将返回找到的所有值...

    或者如果你只查询一个

    mymap.find { it.key.startsWith("FO") }.value
    

    【讨论】:

      【解决方案2】:

      正如你所说,只有一个条目,在这种情况下,findResult 将是你最好的选择

      mymap.findResult{k, v -> if(k.startsWith('FO')) return v}
      

      此外,如果你想让它为空安全,你可以设置一个默认值为

      mymap.findResult('default'){k, v -> if(k.startsWith('FO')) return v}
      

      如果你想收集所有这些值作为一个列表,你需要collectMany

      mymap.collectMany{k, v -> k.startsWith('FO') ? [v] : []}
      

      示例:

      def mymap = ["FOO": "BAR", "something": "else", "FOOD": "Bread", "FOOL": "John Doe"]
      
      assert mymap.findResult{k, v -> if(k.startsWith('FO')) return v} == 'BAR'
      assert mymap.collectMany{k, v -> k.startsWith('FO') ? [v] : []} == ['BAR', 'Bread', 'John Doe']
      assert mymap.findResult('default'){k, v -> if(k.startsWith('BLAH')) return v} == 'default'
      

      【讨论】:

        猜你喜欢
        • 2016-04-04
        • 2022-08-17
        • 2011-11-12
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 2014-09-13
        相关资源
        最近更新 更多