将两个不可变列表与注入组合在一起

时间:2013-10-10 02:43:55

标签: list groovy immutability inject

我有两个由字符串组成的列表,两个都是immmutable:

def list1 = [ "A", "B", "C" ]
list2 = ["D", "E", F"]

我自己制作的自定义函数返回了List 2。有没有办法获取这两个不可变列表并将它们的两个元素与注入组合?我尝试了很多组合而没有成功。我已经广泛搜索了这个。我无法将其更改为可变列表。我知道简单地组合两个列表然后使它们不可变会容易得多,但是,这不是我的目标。

以下是所需的输出:

[ "A", "B", "C", "D", "E", F"]

此处的解决方案将用于解决更大的问题。我只是将其简化为基本情况。

谢谢。

编辑:我必须使用inject方法。我知道我可以简单地使用+或循环遍历每个列表以获得所需的结果。这严格限于在Groovy中使用.inject。

1 个答案:

答案 0 :(得分:1)

//Set as Immutable
def list1 = ["A", "B", "C"].asImmutable() 
def list2 = ["D", "E", "F"].asImmutable() 

//Supports Immutablity
try {list1 << 'Z'} catch(e){assert e instanceof UnsupportedOperationException} 
try {list2 << 'Z'} catch(e){assert e instanceof UnsupportedOperationException}

//Desired result using "inject"
def result = list2.inject(list1){init, val -> [init] << val}.flatten()
assert result == ['A', 'B', 'C', 'D', 'E', 'F'] 

//Immutable Test
assert list1 == ["A", "B", "C"] 
assert list2 == ["D", "E", "F"]

//Supports Immutablity after operation
try {list1 << 'Z'} catch(e){assert e instanceof UnsupportedOperationException}
try {list2 << 'Z'} catch(e){assert e instanceof UnsupportedOperationException}