【问题标题】:How to use "continue" in groovy's each loop如何在groovy的每个循环中使用“继续”
【发布时间】:2017-05-18 20:30:32
【问题描述】:

我是 groovy 的新手(在 java 上工作),正在尝试使用 Spock 框架编写一些测试用例。 我需要使用“每个循环”将以下 Java sn-p 转换为 groovy sn-p

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

Groovy 片段:

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

【问题讨论】:

标签: for-loop groovy each continue


【解决方案1】:

您可以使用标准的for 循环和continue:

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

或者在each的闭包中使用return:

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

【讨论】:

    【解决方案2】:

    如果对象不是null,您也只能输入if 语句。

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

    【讨论】:

    • 使用“continue”方法的代码更干净,当条件不满足时有很多代码要执行。
    【解决方案3】:

    要么使用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)
        }
    }
    

    或者在过滤掉null对象之前使用findAll

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

    【讨论】:

    • OP 想要过滤条目,因此findAll {...} 是这里的最佳答案+1
    • 最新版本的 findAll 看起来最好。但这不是更费时间吗?那您不是要对整个集合进行两次迭代吗?
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2013-06-14
    • 2010-12-18
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多