使用闭包初始化数组,如{int idx - >新项目(idx)}

时间:2017-03-26 20:59:50

标签: arrays groovy

在Groovy中,如何使用紧凑形式的对象初始化数组?我厌倦了制作一个for-i循环,必须有一个Groovyer方式?! ; - )

这里有一些稍微不同的场景,可以很好地涵盖:

情景1:

Item[] items = new Item[x]
items.initialize { int idx -> new Item(idx) }

情景2:

Item[] items = x.times { int idx -> new Item(idx) }

或..

Item[] items = arrayInit(x) { int idx -> new Item(idx) }

场景3 - 这里我们不需要索引:

Item[] items = x.times { new Item() }

(必须使用@CompileStatic,但是参考x.times)

这实际上有用,但如果有更好的东西会很棒:

Item[] items = new Items[x]
items.eachWithIndex { entry, int i -> items[i] = new Item(i) }

2 个答案:

答案 0 :(得分:1)

将以下课程改为Item

@groovy.transform.ToString
class Item {
 def id
}

您可以通过以下两种方式之一调用它来生成相同的输出

//You may change it as needed.
def x = 10
def items = (0..<x).collect { new Item(id:it) }

println items

def items = (0..<x).inject([]){li,item -> li << new Item(id:item);li}
println items

OR:如果只想要数组类型和CompileStatic

Item[] items = (0..<x).inject([]){li,item -> li << new Item(id:item);li} as Item[]
println items

答案 1 :(得分:0)

Item[] items = new Item[x]
x.times { items[it] = new Item(it) }

或者这个怎​​么样,

Item[] items = (0..<x).collect{new Item(it)} as Item[]