List 使用inject组合两个不可变列表

List 使用inject组合两个不可变列表,list,groovy,immutability,inject,List,Groovy,Immutability,Inject,我有两个由字符串组成的列表,它们都是不可变的: def list1 = [ "A", "B", "C" ] list2 = ["D", "E", F"] 列表2由我创建的自定义函数返回。有没有办法将这两个不可变列表与inject结合起来?我尝试了许多组合,但都没有成功。为此,我在谷歌上搜索了很多。我无法将其更改为可变列表。我知道,简单地将两个列表合并,然后使它们不可变会容易得多,但是,唉,这不是我的目标 以下是所需的输出: [ "A", "B", "C", "D", "E", F"] 这里的

我有两个由字符串组成的列表,它们都是不可变的:

def list1 = [ "A", "B", "C" ]
list2 = ["D", "E", F"]
列表2由我创建的自定义函数返回。有没有办法将这两个不可变列表与inject结合起来?我尝试了许多组合,但都没有成功。为此,我在谷歌上搜索了很多。我无法将其更改为可变列表。我知道,简单地将两个列表合并,然后使它们不可变会容易得多,但是,唉,这不是我的目标

以下是所需的输出:

[ "A", "B", "C", "D", "E", F"]
这里的解决方案将用于解决一个更大的问题。我只是把它简化为基本情况

多谢各位

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

//设置为不可变
//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}
def list1=[“A”、“B”、“C”]。asImmutable() def list2=[“D”、“E”、“F”]。asImmutable() //支持不可变性
尝试{list1这是怎么回事?Groovy是基于java平台的。但是ok标记被删除了。这很好。展示一个示例,看看您希望如何看到结果。在闭包中,我遇到了问题。我想在调用returnValue函数时使用list1一次,以在列表的下一个元素中生成正确的条目。T@DaGr8Gatzby
init
在closur内部e表示
list1
,因为
list1
通过指定为
inject
的参数而被指定为列表的头部。仔细查看API。我的代码中的主要问题是,我只有list1可用,而list2由单独的函数生成。然后我需要确保整个集合通过不断添加结果(尾部)来构建初始化。好吧,当
list2
完全生成时,您可以使用上面的代码。难道不能这样做吗?在您使用注入操作时,
list2
是否不能完全可用?@DaGr8GatzbyI需要能够为每个过程生成一个不可变的集合。我是否可以运行闭包的内部8次?