Search code examples
shelljenkinsgroovyjenkins-groovy

How to compare two elements in same list in jenkins?


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]}"

                    }
                }`

Solution

  • 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]'