在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) }
答案 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[]