从列表中创建总和列表

时间:2014-04-04 17:59:09

标签: list collections groovy

有没有更时髦的方法呢?也就是说,从原始列表中的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]

2 个答案:

答案 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]