Groovy中如何将List<E>转换为Tuple<E>?
在Groovy中将List转换为Tuple的正确方法
可以将Groovy的List<E>转换为Tuple<E>,核心是利用Groovy的**扩展操作符(*)**将列表元素展开,传递给Tuple的构造器,这样就能把列表的每个元素作为Tuple的元素,而不是把整个列表当作单个元素。
正确实现代码
def a = [1, 2, "three"] // 使用扩展操作符展开列表元素,传递给Tuple构造器 def b = new Tuple(*a) println(b) // 输出:(1, 2, three) println(b.getClass()) // 输出:class groovy.lang.Tuple
为什么你之前的方法不行
a as Tuple:这种类型转换会把整个列表作为单个元素传入Tuple构造器,相当于执行new Tuple(a),所以得到的是包含原列表的Tuple(即[[1, 2, three]]),不符合预期。a.asImmutable():这个方法返回的是JDK提供的UnmodifiableRandomAccessList,它只是不可变的列表,本质还是List类型,并非Groovy的Tuple。
补充说明
Groovy的Tuple是不可变的,元素数量固定,和Python的tuple特性一致。如果需要固定长度的元组(比如二元组、三元组),也可以使用Tuple2、Tuple3等专用类,同样可以用扩展操作符转换:
def list = [1, "two"] def tuple2 = new Tuple2(*list) println(tuple2) // (1, two)
内容的提问来源于stack exchange,提问作者dojuba
相关产品推荐
相关产品推荐

