代码之家  ›  专栏  ›  技术社区  ›  DaGr8Gatzby

将两个不可变列表与注入相结合

  •  0
  • DaGr8Gatzby  · 技术社区  · 11 年前

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

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

    列表2是由我创建的一个自定义函数返回的。有没有办法将这两个不可变列表与inject结合起来?我试过无数次组合都没有成功。我在谷歌上搜索了很多。我无法将其更改为可变列表。我知道简单地将两个列表组合起来,然后使它们不可变会容易得多,但遗憾的是,这不是我的目标。

    以下是所需的输出:

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

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

    非常感谢。

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

    1 回复  |  直到 11 年前
        1
  •  1
  •   dmahapatro    11 年前
    //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}