web-dev-qa-db-ja.com

groovyの各ループで「continue」を使用する方法

私はgroovy(Javaで働いていた)が初めてで、Spockフレームワークを使用していくつかのテストケースを記述しようとしています。以下が必要ですJava「各ループ」を使用してgroovyスニペットに変換されたスニペット

Javaスニペット:

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);
}

グルーヴィーなスニペット:

def myObj = ["Hello", "World!", "How", "Are", "You"]
myList.each{ myObj->
    if(myObj==null){
        //here I need to continue
    }
    println("My Object is " + myObj)
}
24
Karthikeyan

クロージャは基本的に各要素をパラメータとして呼び出すメソッドであるため、returnを使用します

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

または、パターンを

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

または、findAllオブジェクトを除外する前にnullを使用します

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

forで標準のcontinueループを使用できます。

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

またはreturnのクロージャーでeachを使用します。

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

オブジェクトがifでない場合にのみ、nullステートメントを入力することもできます。

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