Map 如何从现有地图创建具有新值但键相同的新地图?
我在Groovy中已有一个映射。Map 如何从现有地图创建具有新值但键相同的新地图?,map,groovy,Map,Groovy,我在Groovy中已有一个映射。 我想创建一个具有相同键但不同值的新地图 例如: 通过某种形式的闭包,如: def preference = scores.collect {//something} 您可以使用collectEntries scores.collectEntries { k, v -> [ k, 'new value' ] } 对范围使用映射的替代方法是使用开关 def grade = { score -> switch( score ) {
我想创建一个具有相同键但不同值的新地图 例如: 通过某种形式的闭包,如:
def preference = scores.collect {//something}
您可以使用
collectEntries
scores.collectEntries { k, v ->
[ k, 'new value' ]
}
对范围使用映射
的替代方法是使用开关
def grade = { score ->
switch( score ) {
case 10..9: return 'love'
case 8..6: return 'like'
case 5..2: return 'meh'
case 1..0: return 'hate'
default : return 'ERR'
}
}
scores.collectEntries { k, v -> [ k, grade( v ) ] }
那么结果就是
[vanilla:like, chocolate:like, papaya:hate]
编辑:如果您想要地图,那么您应该使用tim_yates所说的collectEntries。漂亮的功能性解决方案(包括您的范围,并且易于修改):
是的,你可以。你从哪里得到这些值(爱、爱、恨)?假设它是基于范围的
10..9=love,8..6=like,5..2=meh,1..0=hate
。我需要知道的是如何使用一个能够识别键值对的闭包,并为我生成更多的键值对,所有这些都将生成一个新的映射。
def scores = ["vanilla":10, "chocolate":9, "papaya": 0]
def preference = scores.collectEntries {key, value -> ["$key":(value > 5 ? "like" : "hate")]}
[vanilla:like, chocolate:like, papaya:hate]
def scores = [vanilla:10, chocolate:9, papaya: 0]
// Store somewhere
def map = [(10..9):"love", (8..6):"like", (5..2):"meh", (1..0):"hate"]
def preference = scores.collectEntries { key, score -> [key, map.find { score in it.key }.value] }
// Output: [vanilla:love, chocolate:love, papaya:hate]