有没有更时髦的方法呢?也就是说,从原始列表中的3个数字组的总和创建一个新列表。
myList = [1,2,3,4,5,6,7,8,9]
newList = []
while (myList.size > 0) {
newList.add(myList.pop() + myList.pop() + myList.pop())
}
println newList.reverse()
[6, 15, 24]
答案 0 :(得分:5)
这个怎么样:
myList.collate(3).collect {it.sum()}
或只是很好地使用点差运算符*
myList.collate(3)*.sum()
答案 1 :(得分:4)
您可以使用collate将列表分组为3个元素的子列表:
groovy:000> myList = [1,2,3,4,5,6,7,8,9]
===> [1, 2, 3, 4, 5, 6, 7, 8, 9]
groovy:000> myList.collate(3)
===> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
然后对每个子列表求和;总和可以通过注入完成:
groovy:000> myList.collate(3)*.inject(0) { sum, i -> sum + i }
===> [6, 15, 24]
或者只是使用这种便捷方法sum
groovy:000> myList.collate(3)*.sum()
===> [6, 15, 24]