【问题标题】:for each loop in groovy对于groovy中的每个循环
【发布时间】:2014-08-29 14:16:54
【问题描述】:

如何在 Groovy 中实现 foreach? 我有一个Java代码示例,但我不知道如何在Groovy中实现此代码...

Java:

for (Object objKey : tmpHM.keySet()) {
   HashMap objHM = (HashMap) list.get(objKey);
}

我阅读了http://groovy.codehaus.org/Looping,并尝试将我的 Java 代码翻译成 Groovy,但它不起作用。

for (objKey in tmpHM.keySet()) {
   HashMap objHM = (HashMap) list.get(objKey);
}

【问题讨论】:

  • 一般说明:如果您具体说 what 不起作用(不是“它不起作用”),您会得到更好的答案。我刚试过,循环工作。
  • 这里有很多在 grooy 中使用循环的例子:grails.asia/groovy-each-examples

标签: java groovy foreach


【解决方案1】:

就这么简单:

tmpHM.each{ key, value -> 
  doSomethingWithKeyAndValue key, value
}

【讨论】:

  • 使用闭包并不总是最好的解决方案。 .each() 方法不允许中断;
  • 这正是each 和所有其他常规收集方法的构建方式:它们只是盲目地迭代一对一。如果你需要另一个迭代逻辑,你必须坚持传统的循环
  • tmpHM.eachWithIndex{ key, value -> doSomethingWithKeyAndValue() }
  • @injecteer:如果你使用find并返回true,你可以打破。
  • @BobStine 这并不是真正的休息。 findeach 用途完全不同
【解决方案2】:

这个对我有用:

def list = [1,2,3,4]
for(item in list){
    println item
}

来源:Wikia

【讨论】:

    【解决方案3】:

    您可以将以下 groovy 代码用于带有 for-each 循环的地图。

    def map=[key1:'value1', key2:'value2']
    
    for (item in map) {
      log.info item.value // this will print value1 value2
      log.info item       // this will print key1=value1 key2=value2
    }
    

    【讨论】:

      【解决方案4】:

      您的代码运行良好。

      def list = [["c":"d"], ["e":"f"], ["g":"h"]]
      Map tmpHM = [1:"second (e:f)", 0:"first (c:d)", 2:"third (g:h)"]
      
      for (objKey in tmpHM.keySet()) {   
          HashMap objHM = (HashMap) list.get(objKey);
          print("objHM: ${objHM}  , ")
      }
      

      打印objHM: [e:f] , objHM: [c:d] , objHM: [g:h] ,

      https://groovyconsole.appspot.com/script/5135817529884672

      然后点击“在控制台编辑”、“执行脚本”

      【讨论】:

        猜你喜欢
        • 2017-09-04
        • 2020-04-06
        • 2014-05-04
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        相关资源
        最近更新 更多