我想創建一個包含Groovy中某個類的10個不同對象的List。在Java中有Arrays.fill,但我確信Groovy中有一種更優雅的方式。如何在Groovy中輕鬆地填充新對象列表?
我嘗試這樣做:
def mylist = [new MyClass()]*10;
但是,這讓我對列表中的每個項目相同的參考。
我想創建一個包含Groovy中某個類的10個不同對象的List。在Java中有Arrays.fill,但我確信Groovy中有一種更優雅的方式。如何在Groovy中輕鬆地填充新對象列表?
我嘗試這樣做:
def mylist = [new MyClass()]*10;
但是,這讓我對列表中的每個項目相同的參考。
我結束了使用@ cfrick的版本:
def l = ([MyClass]*10)*.newInstance()
assert l.size() == 10
assert l.unique().size() == 10
它適合一行並且可讀。
你可以使用簡單的withDefault
它每次它被稱爲時間返回新的對象:
def l = [].withDefault { new Object() }
或(這並沒有太大的意義在我看來):
def l = (0..9).collect { new Object() }
assert l.size() == 10
assert l.unique().size() == 10
使用閉包解決方案創建每個對象:
def create = { new Object() }
objects = ([ create ] * 10)*.call()
assert objects.unique().size() == 10
'([Object] * 10)*。newInstance()'爲了它的樂趣... – cfrick 2014-08-29 12:24:41
您是否曾在帶拖鞋的椅子上試過? ;-) – 2014-08-29 14:20:23