I was running a jenkins declarative pipeline job where I was trying to compare elements of a list and fetch only the same part of two elements.
Example:
myList = [/lambda/billMechanism/createCustomerOrderBill, /lambda/billMechanism/createCustomerOrderBill/src, /lambda/billMechanism/createCustomerOrderBill/test, /lambda/billMechanism/isLastPaidBillInCracePeriod, /lambda/billMechanism/isLastPaidBillInCracePeriod/src, /lambda/billMechanism/isLastPaidBillInCracePeriod/test,/lambda/copyPaymentInfo, /lambda/copyPaymentInfo/src, /lambda/copyPaymentInfo/test, /lambda/custOrdWorkflFinancialCharge, /lambda/custOrdWorkflFinancialCharge/src, /lambda/custOrdWorkflFinancialCharge/test,]
My expected output:
myList = [/lambda/billMechanism/createCustomerOrderBill,/lambda/billMechanism/isLastPaidBillInCracePeriod, /lambda/copyPaymentInfo, /lambda/custOrdWorkflFinancialCharge,]
Here, I am only trying to fetch the common parts by comparing 2 elements from same list.
I was trying to iterate through for loop but it was taking more time.
`for (int i = 0; i < myList.size(); i++) {
s1 = "${myList[i]}"
for (int j = i+1; j < myList.size(); j++) {
sh "echo ${myList[j]}"
}
}`
The easiest way is to use groupBy
and remove the variable parts like /src
and /test
:
def myList = ['/lambda/billMechanism/createCustomerOrderBill', '/lambda/billMechanism/createCustomerOrderBill/src', '/lambda/billMechanism/createCustomerOrderBill/test', '/lambda/billMechanism/isLastPaidBillInCracePeriod', '/lambda/billMechanism/isLastPaidBillInCracePeriod/src', '/lambda/billMechanism/isLastPaidBillInCracePeriod/test', '/lambda/copyPaymentInfo', '/lambda/copyPaymentInfo/src', '/lambda/copyPaymentInfo/test', '/lambda/custOrdWorkflFinancialCharge', '/lambda/custOrdWorkflFinancialCharge/src', '/lambda/custOrdWorkflFinancialCharge/test',]
def commonParts = myList.groupBy{ it.replaceFirst( /\/(src|test)$/, '' ) }.keySet()
assert commonParts.toString() == '[/lambda/billMechanism/createCustomerOrderBill, /lambda/billMechanism/isLastPaidBillInCracePeriod, /lambda/copyPaymentInfo, /lambda/custOrdWorkflFinancialCharge]'