我的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世界的新手,并且在最近两天坚持了它。
答案 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
列表