【问题标题】:Groovy Regex ClosureGroovy 正则表达式闭包
【发布时间】:2014-10-15 13:03:46
【问题描述】:

在我的 Grails 控制器中,我试图从数据库中获取图像文件的路径集合作为对象集合。我知道如何将数据从控制器传递到 Grails 中的视图的唯一方法是作为地图,因此我将对象转换为地图。

我需要剥离路径以便我只能获取文件名,然后在视图中我可以将正确/新的路径添加到文件名以链接文件。

对于闭包来说,这似乎是一项不错的工作——我错了吗?——但我不确定如何在闭包中编写正则表达式。

感谢您的帮助!

private Map getMap() {
    Sql sql = Sql.newInstance(dataSource)

    // Query DB to get image paths
    def result = sql.rows("""   SELECT image_path
                                FROM images
                                WHERE display=TRUE """)

    // Convert results into a map that can be more easily parsed in the view
    def gallery = result.collectEntries {
        [imagePath: it.image_path] 
    }

    gallery.each() { key, value -> /* regex goes here */ }
    return gallery
}

【问题讨论】:

  • 1:为什么要进行原始 SQL 调用? 2:你可能需要collect 不是每个
  • 原始 SQL 调用不是我的选择。我正在让我们转向使用 GORM,但现在需要 SQL 调用来实现旧项目的“代码一致性”。
  • 您也可以在 SQL 查询中使用正则表达式并输入 distinct 以获取唯一值

标签: regex grails groovy closures


【解决方案1】:

这是关闭收藏的最佳时机=)

private Map getMap() {
    Sql sql = Sql.newInstance(dataSource)

    // Query DB to get image paths
    def result = sql.rows("""   SELECT image_path
                                FROM images
                                WHERE display=TRUE """)

    // Convert results into a map that can be more easily parsed in the view
    def gallery = result.collect{ [imgKey : it.image_path] } 

    //why not just use File.name instead of regex
    gallery.collect() { key, imgPath -> [key, new File(imgPath).name] }
    return gallery
}

【讨论】:

  • 请记住,文件构造函数实际上并不创建文件——它代表系统中可能存在或不存在的东西。既然你只想要名字,我认为推广一些更简洁的代码是一个不错的选择
  • 我仍然不确定我是否了解如何正确使用集合。实现你的代码我遇到了一些类型错误。 gallery.collect 闭包表示没有适用于 LinkedHashMap 的版本(值:[[imgKey:maps/foo.jpg]])。我最终还不得不更改方法以返回一个 ArrayList,幸运的是,它在 grails 视图中运行良好。不过,我确实设法在一个收集闭包中完成了所有工作,就像下面的评论一样。非常感谢您的帮助!
  • private ArrayList getImages() { Sql sql = Sql.newInstance(dataSource) def result = sql.rows(""" SELECT image_path FROM images WHERE display=TRUE """) def gallery = result.collect{ [image : new File(it.image_path).name] } return gallery } 呃。不喜欢 StackOverflow 在 cmets 中缺乏缩进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
相关资源
最近更新 更多