grails - groovy/grails,无法从 map 上删除

标签 grails groovy

您能帮我从下面的 map 中简单地删除(在下面的通知输出中)识别出什么问题吗?

  public class Issue {
  ...

  def allButThis() {
    println "allButThis ..."
    def all = Issue.list()
    println "all is ${all}"
    all.remove(this.id)
    println "all with ${this.id} removed: ${all}"
    return all
  }

   String toString() {return "${id}: ${title}"}

运行此命令时,我得到以下结果,即项目2没有按预期移除
  allButThis ...
  all is [1: Issue-1, 2: Issue-2, 3: Issue-3]
  all with 2 removed: [1: Issue-1, 2: Issue-2, 3: Issue-3]

据我所知,这个删除应该工作,例如http://groovy.codehaus.org/JN1035-Maps,其中“删除”在页面下三分之一处描述。

我正在使用Grails 1.3.7。

谢谢

附言我在上面添加了toString()方法,也许我自欺欺人。

-------------更新----------

我删除了toString()方法,并遵循Rob的解决方案,即:
  all.remove(this)
  println "all with ${this} removed: ${all}"

产生:
 all is [momentum.Issue : 1, momentum.Issue : 2, momentum.Issue : 3]
 all with momentum.Issue : 2 removed: [momentum.Issue : 1, momentum.Issue : 3]

最佳答案

this.id的类型为Long,因此,如果要删除第n个项目,则需要将其转换为整数。但是,这非常危险,因为id的条目并不总是第n个条目。使用.findAll({it.id != this.id})删除此项目会更节省。

在这种情况下,我建议您这样做:

def allExceptThis = Issue.withCriteria {
   ne("id", this.id)
}.list();

关于grails - groovy/grails,无法从 map 上删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056336/

相关文章:

javascript - 寻求有关 <g :javascript> 的使用的一些说明

javascript - Google 放置自动完成限制类型和隐藏键

grails - 对象未保存在Spock集成测试中

java - 重用java业务逻辑

java - 使用 app.context 时 Grails 重定向到错误的地址?

grails - grails(GGTS):我可以自动将类从target-eclipse复制到部署文件夹吗?

hibernate - 在Grails中,如何获取域代理而不是完整记录

grails - 如何重构Groovy中作为方法调用参数的闭包中的重复项?

groovy - 获取已解析的groovy脚本方法

groovy - process.text 的错误等效项?