是否有更多的Groovish方法将元素添加到列表映射并初始化默认列表(如果不存在)?
或者换句话说,下面的代码是一种Groovish方式:
def mylist = [1,2,3,4]
def mymap = [:]
for (num in mylist){
if (num % 2 == 0){
pairity = "even"
} else {
pairity = "odd"
}
if (mymap.containsKey(pairity)){
println("Adding to Even")
mymap[pairity].add(num)
}
else {
println("adding to Odd")
mymap[pairity] = [num]
}
}
print(mymap.toString())
// adding to Odd
// adding to Odd
// Adding to Even
// Adding to Even
// [odd:[1, 3], even:[2, 4]]
答案 0 :(得分:3)
您可以简单地groupby
:
def mymap = mylist.groupBy { it % 2 == 0 ? 'even' : 'odd' }
这实际上是使用闭包在条件上对列表进行分区。
答案 1 :(得分:3)
您可以在地图上使用withDefault来自动为缺少的访问键生成一个值。
[1,2,3,4].inject([:].withDefault{[]}){ m, i -> m[ i%2==0 ? 'odd' : 'even' ] << i; m }
// => [even:[1, 3], odd:[2, 4]]