How to use "continue" in groovy's each loop

41,937

Solution 1

Either use return, as the closure basically is a method that is called with each element as parameter like

def myObj = ["Hello", "World!", "How", "Are", "You"]
myList.each{ myObj->
    if(myObj==null){
        return
    }
    println("My Object is " + myObj)
}

Or switch your pattern to

def myObj = ["Hello", "World!", "How", "Are", "You"]
myList.each{ myObj->
    if(myObj!=null){
        println("My Object is " + myObj)
    }
}

Or use a findAll before to filter out null objects

def myList = ["Hello", "World!", "How", "Are", null, "You"]
myList.findAll { it != null }.each{ myObj->
    println("My Object is " + myObj)
}

Solution 2

you can either use a standard for loop with continue:

for( String myObj in myList ){
  if( something ) continue
  doTheRest()
}

or use return in each's closure:

myList.each{ myObj->
  if( something ) return
  doTheRest()
}

Solution 3

You could also only enter your if statement if the object isn't null.

def myObj = ["Hello", "World!", "How", "Are", "You"]
myList.each{ 
    myObj->
    if(myObj!=null){
        println("My Object is " + myObj)
    }
}
Share:
41,937
Karthikeyan
Author by

Karthikeyan

Updated on July 09, 2022

Comments

  • Karthikeyan
    Karthikeyan almost 2 years

    I am new to groovy (worked on java), trying to write some test cases using Spock framework. I need the following Java snippet converted into groovy snippet using "each loop"

    Java Snippet:

    List<String> myList = Arrays.asList("Hello", "World!", "How", "Are", "You");
    for( String myObj : myList){
        if(myObj==null) {
            continue;   // need to convert this part in groovy using each loop
        }
        System.out.println("My Object is "+ myObj);
    }
    

    Groovy Snippet:

    def myObj = ["Hello", "World!", "How", "Are", "You"]
    myList.each{ myObj->
        if(myObj==null){
            //here I need to continue
        }
        println("My Object is " + myObj)
    }
    
  • Pablo Pazos
    Pablo Pazos about 7 years
    code is cleaner with the "continue" approach, when there is a lot of code to be executed when the condition is not satisfied.
  • Alex
    Alex almost 4 years
    OP wants to filter entries and therefore findAll {...} is the top answer here +1
  • Yaerius
    Yaerius almost 4 years
    Last version with findAll looks the niciest. But isn't that more time consuming? Aren't you iterating over the whole collection twice then?