Groovy - Collection仅返回单个值

时间:2013-06-18 20:56:04

标签: groovy

我有一个小代码片段,它循环遍历一个节点并抓取它的所有属性。 如果我设置一个变量来获取属性值(除了它周围有一个奇怪的[]),我可以让它工作。但我不想要冗余代码,所以我试图在循环中设置多个属性,除了返回的所有属性都是单个值,它不会循环遍历所有节点。

工作

String selectNodeLabel = null
selectNodeLabel = JcrUtils.getChildNodes("links").collect{ 
  it.getProperty("label").getString()
}

单一价值

String selectNodeLabel = null
String selectNodeMeta = null
String selectNodeFooter= null
String topicNode = null

topicNode = JcrUtils.getChildNodes("links").collect{ 
  selectNodeLabel = it.getProperty("label").getString()
  selectNodeMeta = it.getProperty("meta").getString()
  selectNodeFooter = it.getProperty("footer").getString()
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尝试:

def nodeList = JcrUtils.getChildNodes("links").collect{ 
  [ selectNodeLabel  : it.getProperty("label").getString()
    selectNodeMeta   : it.getProperty("meta").getString()
    selectNodeFooter : it.getProperty("footer").getString() ]
}

然后,nodeList将成为地图列表,您可以这样做:

println nodeList*.selectNodeLabel

例如,打印所有selectNodeLabel值。

解释代码的问题... Collect会创建闭包返回的元素列表。您的 SINGLE VALUE 代码正在执行的操作是覆盖selectNode...变量中的值,然后将topicNode设置为{{1}中每个元素的闭包返回的值}。

对于这种情况,JcrUtils.getChildNodes("links")将包含topicNode的列表(因为它是Closure中的最后一行