每个grails中的总和

时间:2012-08-22 10:23:44

标签: groovy aggregate-functions

我的psudo代码用于获取特定作业类中每个进程所花费的时间,如下所示。

                psteps.each {ProcessingStep pstep ->
    List<ExecutionState> states = ProcessingStepUpdate.findAllByProcessingStepAndState(pstep,ExecutionState.blah)
    states.each{ProcessingStepUpdate psu ->
        use(groovy.time.TimeCategory) {
            startTime=pc.started
            endTime=psu.date
            timeTaken = endTime-startTime
            println "Time Taken for ${pc.startJobClass} is ${timeTaken} in ${JCType}"                    
        }
    }
}

代码现在不是数组/列表的形式,因此我无法计算每个作业类的总时间。

这是我试过的东西

use(groovy.time.TimeDuration){
        duration=timeTaken.toArray().sum()
        println "Time taken for ${JCType} is ${duration}"
        println "***********************************************************"
    }

知道错误是什么?我是OOPS世界的新手,并且在最近两天坚持了它。

2 个答案:

答案 0 :(得分:2)

timeTaken不是列表,它是一个groovy.time.TimeDuration对象。试试这个:

def states = ProcessingStepUpdate.findAllByProcessingStepAndState(pstep,ExecutionState.blah)
def times = []
states.each{psu ->
    use(groovy.time.TimeCategory) {
        startTime=pc.started
        endTime=psu.date
        timeTaken = endTime-startTime
        times << timeTaken // You add timeTaken to arrayList
        println "Time Taken for ${pc.startJobClass} is ${timeTaken} in ${JCType}"
        println "Total time ${times.sum()}"     
    }
}

答案 1 :(得分:0)

在您states.each{之前声明一个将保留总时间的变量totalTime def totalTime = 0
现在在each封闭内,只需将timeTaken添加到totalTime中 totalTime += Integer.parseInt(timeTaken)
尝试阅读一些groovy,你可以跳过很多代码,如List<ExecutionState> states,只需使用def states

您执行states.each{后也不需要写ProcessingStepUpdate psu ->!你可以做psu ->或不做。使用it引用states列表

中的当前对象