【问题标题】:groovy - findAll getting only one valuegroovy - findAll 只得到一个值
【发布时间】:2013-06-18 16:11:12
【问题描述】:

我正在努力寻找带有 groovy 的 findAll 示例。我有一个非常 获取节点属性并输出的简单代码 sn-p 价值。除了我在循环时只得到最后一个值 一系列属性。我在这里做错了什么吗,这个 看起来很简单。

JcrUtils.getChildNodes("footer").findAll{ 
 selectFooterLabel = it.hasProperty("footerLabel") ? it.getProperty("footerLabel").getString() : ""
}

在我的 jsp 中,我只是打印属性:

<%=selectFooterLabel%>

感谢您的帮助!

【问题讨论】:

  • 我相信selectFooterLabel 每次都会被重新分配。

标签: groovy


【解决方案1】:

findAll 返回一个 List 包含原始列表中的所有项目,闭包为其返回一个 Groovy-true 值(布尔值 true,非空字符串/映射/集合,非空任何其他值)。看起来你可能想要collect

def footerLabels = JcrUtils.getChildNodes("footer").collect{ 
 it.hasProperty("footerLabel") ? it.getProperty("footerLabel").getString() : ""
}

这将为您提供闭包返回的值的列表。如果您只想要那些不为空的子集,您可以使用不带闭包参数的findAll(),它为您提供列表中本身为 Groovy-true 的值的子集

def footerLabels = JcrUtils.getChildNodes("footer").collect{ 
 it.hasProperty("footerLabel") ? it.getProperty("footerLabel").getString() : ""
}.findAll()

【讨论】:

  • 谢谢!您在 collect 中删除 selectFooterLabel 是否有特定原因?
  • @DelmonYoung 因为它掩盖了代码实际在做什么。 collect 方法在为原始列表的每个元素调用时“收集”闭包返回的值。在闭包中放置一个赋值是不对的,重要的是闭包返回
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多