Groovy编写单一方法而不是每个函数两个
我是一个非常棒的初学者 这是两个Groovy编写单一方法而不是每个函数两个,groovy,Groovy,我是一个非常棒的初学者 这是两个调用,每个调用都执行类似的任务,但具有不同的属性s2PublicLifecycleInstance 我如何编写一个单独的函数来执行以下操作,这样我就只能调用方法来完成任务 def scheduledStatusArray =[] def publishedStatusArray =[] s2PublicLifecycleInstance.each { if(it.scheduledInMyLearnStatus == "No"){ scheduled
调用,每个调用都执行类似的任务,但具有不同的属性s2PublicLifecycleInstance
我如何编写一个单独的函数来执行以下操作,这样我就只能调用方法来完成任务
def scheduledStatusArray =[]
def publishedStatusArray =[]
s2PublicLifecycleInstance.each {
if(it.scheduledInMyLearnStatus == "No"){
scheduledStatusArray.add(1)
} else if(it.scheduledInMyLearnStatus == "Yes"){
scheduledStatusArray.add(2)
}else{
scheduledStatusArray.add(3)
}
}
s2PublicLifecycleInstance.each {
if(it.publishedOnTrainingClassesStatus == "No"){
publishedStatusArray.add(1)
}else if(it.publishedOnTrainingClassesStatus == "Yes"){
publishedStatusArray.add(2)
}else{
publishedStatusArray.add(3)
}
}
我想要这样的东西:
def publishedStatusArray = functionCall(s2PublicLifecycleInstance, propertyName)
在Groovy中可能吗 您可以使用以下方法进行此操作:
def myMethod(param, arrayToAdd) {
if(param == "No"){
arrayToAdd.add(1)
}else if(param == "Yes"){
arrayToAdd.add(2)
}else{
arrayToAdd.add(3)
}
}
s2PublicLifecycleInstance.each {myMethod(it.scheduledInMyLearnStatus, scheduledStatusArray)}
s2PublicLifecycleInstance.each {myMethod(it.publishedOnTrainingClassesStatus, publishedStatusArray)}
List check( List lifecycle, String param ) {
lifecycle.collect { it ->
switch( it."$param" ) {
case "No":
return 1
case "Yes":
return 2
default:
return 3
}
}
}
def scheduledStatusArray = check( s2PublicLifecycleInstance, 'scheduledInMyLearnStatus' )
def publishedStatusArray = check( s2PublicLifecycleInstance, 'publishedOnTrainingClassesStatus' )
或者,您可以这样做(代码更少):
另一种选择是将inject与多个赋值一起使用:
def (scheduledStatusArray, publishedStatusArray) = s2PublicLifecycleInstance.inject( [[],[]] ) { lists, it ->
lists[ 0 ] << ( it.scheduledInMyLearnStatus == 'No' ? 1 :
it.scheduledInMyLearnStatus == 'Yes' ? 2 : 3 )
lists[ 1 ] << ( it.publishedOnTrainingClassesStatus == 'No' ? 1 :
it.publishedOnTrainingClassesStatus == 'Yes' ? 2 : 3 )
lists
}
def(scheduledStatusArray,publishedStatusArray)=s2PublicLifecycleInstance.inject([[],[]){列表,它->
列出[0]您可以使用以下方法执行此操作:
List check( List lifecycle, String param ) {
lifecycle.collect { it ->
switch( it."$param" ) {
case "No":
return 1
case "Yes":
return 2
default:
return 3
}
}
}
def scheduledStatusArray = check( s2PublicLifecycleInstance, 'scheduledInMyLearnStatus' )
def publishedStatusArray = check( s2PublicLifecycleInstance, 'publishedOnTrainingClassesStatus' )
或者,您可以这样做(代码更少):
另一种选择是将inject与多个赋值一起使用:
def (scheduledStatusArray, publishedStatusArray) = s2PublicLifecycleInstance.inject( [[],[]] ) { lists, it ->
lists[ 0 ] << ( it.scheduledInMyLearnStatus == 'No' ? 1 :
it.scheduledInMyLearnStatus == 'Yes' ? 2 : 3 )
lists[ 1 ] << ( it.publishedOnTrainingClassesStatus == 'No' ? 1 :
it.publishedOnTrainingClassesStatus == 'Yes' ? 2 : 3 )
lists
}
def(scheduledStatusArray,publishedStatusArray)=s2PublicLifecycleInstance.inject([[],[]){列表,它->
列出[0]我同意加桑的观点。我可以补充一点,那就是
def publishedStatusArray=functionCall(s2PublicLifecycleInstance,propertyName)
在groovy中是可能的。函数:
functionCall(def s2PublicLifecycleInstance,String propertyName){
s2PublicLifecycleInstance.“$propertyName”
}
将归还您想要的财产。我同意加桑的观点。我可以补充一点,那就是
def publishedStatusArray=functionCall(s2PublicLifecycleInstance,propertyName)
在groovy中是可能的。函数:
functionCall(def s2PublicLifecycleInstance,String propertyName){
s2PublicLifecycleInstance.“$propertyName”
}
将返回所需的属性。您可以使用闭包和套用:
def checkStatus = { prop,instances ->
def statuses = instances.collect {
switch( it[prop] ) {
case "Yes": 1
break
case "No": 2
break
default: 3
}
}
return statuses
}
def checkScheduledStatus = checkStatus.curry("scheduledInMyLearnStatus")
def checkPublishedStatus = checkStatus.curry("publishedOnTrainingClassesStatus")
def scheduledStatusArray = checkScheduledStatus(s2PublicLifecycleInstance)
def publishedStatusArray = checkPublishedStatus(s2PublicLifecycleInstance)
您可以使用闭包和咖喱:
def checkStatus = { prop,instances ->
def statuses = instances.collect {
switch( it[prop] ) {
case "Yes": 1
break
case "No": 2
break
default: 3
}
}
return statuses
}
def checkScheduledStatus = checkStatus.curry("scheduledInMyLearnStatus")
def checkPublishedStatus = checkStatus.curry("publishedOnTrainingClassesStatus")
def scheduledStatusArray = checkScheduledStatus(s2PublicLifecycleInstance)
def publishedStatusArray = checkPublishedStatus(s2PublicLifecycleInstance)