繁体   English   中英

Groovy each()方法未正确迭代

[英]Groovy each() method does not iterate properly

尝试以下代码时,我遇到了each()方法的奇怪行为:

def xml = new XmlSlurper().parseText('''
<list>
    <item a="1">a</item>
    <item a="2">b</item>
    <item a="1">c</item>
</list>
''')

def i = 0
xml.'**'.findAll { it.@a=='1' }.each {
    println "hi" + i
}  

结果只是hi0 ,但是我希望hi0hi1 这是错误还是每种语言设计? 仅当我写println "hi" + i++而不是当前的闭包主体时,才提供第二个结果,所以当每个项目的内容都不同时...

您的i变量未递增,因为没有任何内容告诉它递增。 当前编写代码的方式,我希望输出为:

hi0
hi0

我认为您正在寻找的是eachWithIndex ,它为闭包提供了两个参数-当前项目和该项目的索引。 您的代码将如下所示:

def xml = new XmlSlurper().parseText('''
<list>
    <item a="1">a</item>
    <item a="2">b</item>
    <item a="1">c</item>
</list>
''')

xml.'**'.findAll { it.@a=='1' }.eachWithIndex { item, i ->
    println "hi" + i
}

结果是:

hi0
hi1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM