2014-08-29 69 views
0

我想创建一个包含Groovy中某个类的10个不同对象的List。在Java中有Arrays.fill,但我确信Groovy中有一种更优雅的方式。如何在Groovy中轻松地填充新对象列表?

我尝试这样做:

def mylist = [new MyClass()]*10; 

但是,这让我对列表中的每个项目相同的参考。

+2

'([Object] * 10)*。newInstance()'为了它的乐趣... – cfrick 2014-08-29 12:24:41

+3

您是否曾在带拖鞋的椅子上试过? ;-) – 2014-08-29 14:20:23

回答

0

我结束了使用@ cfrick的版本:

def l = ([MyClass]*10)*.newInstance() 

assert l.size() == 10 
assert l.unique().size() == 10 

它适合一行并且可读。

0

你可以使用简单的withDefault它每次它被称为时间返回新的对象:

def l = [].withDefault { new Object() } 

或(这并没有太大的意义在我看来):

def l = (0..9).collect { new Object() } 
assert l.size() == 10 
assert l.unique().size() == 10 
+2

是不是第二个版本过于复杂? 'def l =(0..9).collect {new Object()}' – cfrick 2014-08-29 11:51:32

+0

是的,它绝对是;]谢谢! – Opal 2014-08-29 12:15:39

+0

您的第一个版本看起来不错,但您必须重新遍历它才能真正创建实例。 你能否阐述为什么你的第二个版本没有意义?这似乎是我最优雅的解决方案。 – unSinn 2014-09-01 09:54:18

0

使用闭包解决方案创建每个对象:

def create = { new Object() } 
objects = ([ create ] * 10)*.call() 

assert objects.unique().size() == 10