首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用闭包初始化数组,如{ int idx -> new Item(idx) }

使用闭包初始化数组,如{ int idx -> new Item(idx) }
EN

Stack Overflow用户
提问于 2017-03-27 04:59:50
回答 2查看 160关注 0票数 0

在Groovy中,如何使用紧凑形式的对象初始化数组?我受够了做for-i循环,一定有Groovyer的方式?!;-)

下面是一些稍有不同的场景,最好能介绍一下:

场景1:

代码语言:javascript
复制
Item[] items = new Item[x]
items.initialize { int idx -> new Item(idx) }

场景2:

代码语言:javascript
复制
Item[] items = x.times { int idx -> new Item(idx) }

或者..。

代码语言:javascript
复制
Item[] items = arrayInit(x) { int idx -> new Item(idx) }

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

代码语言:javascript
复制
Item[] items = x.times { new Item() }

(必须使用@CompileStatic,不过-参考x.times)

这实际上是有效的,但如果有更好的东西就更好了:

代码语言:javascript
复制
Item[] items = new Items[x]
items.eachWithIndex { entry, int i -> items[i] = new Item(i) }
EN

回答 2

Stack Overflow用户

发布于 2017-03-27 10:30:44

将下面的类作为Item

代码语言:javascript
复制
@groovy.transform.ToString
class Item {
 def id
}

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

代码语言:javascript
复制
//You may change it as needed.
def x = 10
def items = (0..<x).collect { new Item(id:it) }

println items

代码语言:javascript
复制
def items = (0..<x).inject([]){li,item -> li << new Item(id:item);li}
println items

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

代码语言:javascript
复制
Item[] items = (0..<x).inject([]){li,item -> li << new Item(id:item);li} as Item[]
println items
票数 1
EN

Stack Overflow用户

发布于 2017-03-27 12:58:29

代码语言:javascript
复制
Item[] items = new Item[x]
x.times { items[it] = new Item(it) }

或者这样吧,

代码语言:javascript
复制
Item[] items = (0..<x).collect{new Item(it)} as Item[]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43034492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档