2014-08-29 39 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 
相關問題