Groovy或Java相当于sumproduct?

时间:2015-08-25 13:42:42

标签: groovy

在我自己编写之前,有没有人知道Groovy或Java是否有预先构建的内容类似于Excel的sumproduct函数?

sumproduct的准语法类似于

#groupPicture

你会得到120((2 * 5)+(3 * 10)+(4 * 20)= 120)

3 个答案:

答案 0 :(得分:6)

您可以transpose()collect()sum结果:

def list1 = [2,3,4]
def list2 = [5,10,20]

assert [list1, list2]
    .transpose()
    .collect { it[0] * it[1] }
    .sum()  == 120

答案 1 :(得分:2)

并非真正的开箱即用SUMPRODUCT替代品,但仍然是单线:

def list1 = [2,3,4]
def list2 = [5,10,20]

assert 120 == GroovyCollections.transpose( list1, list2 ).sum{ it[ 0 ] * it[ 1 ] }

答案 2 :(得分:2)

这是sumproduct的一个版本,不仅限于两个输入列表:

def sumproduct(List... lists) {
  (lists as List).transpose().sum { it.inject(1) { prod, val -> prod * val } }
}

使用sumproduct([2,3,4], [5,10,20], [1,2,3])调用它会返回310。