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)
}
}
Author by
Karthikeyan
Updated on July 09, 2022Comments
-
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 about 7 yearscode is cleaner with the "continue" approach, when there is a lot of code to be executed when the condition is not satisfied.
-
Alex almost 4 yearsOP wants to filter entries and therefore
findAll {...}
is the top answer here +1 -
Yaerius almost 4 yearsLast version with findAll looks the niciest. But isn't that more time consuming? Aren't you iterating over the whole collection twice then?