0

私はたくさんの値を持つマップを持っています

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

キーが渡したもので始まるかどうかに基づいて値を引き出したい。すなわち

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

上記は戻ります{FOO=BAR}

値のみを取得するように変更するにはどうすればよいBARですか?

each私はこれを試しましたが、常に1つの値しか持たないことを知っているので、したくありません

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

2 に答える 2

2

あなたが言ったように、エントリは1つだけです。その場合、findResultあなたの最善の策になります

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

さらに、null セーフにしたい場合は、デフォルト値を次のように設定できます。

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'
于 2013-07-16T18:19:59.627 に答える