【问题标题】:Grails map values before sorting排序前的 Grails 映射值
【发布时间】:2020-07-07 12:13:08
【问题描述】:

是否可以在 Grails 中对数据库查询结果进行排序之前对其进行映射或转换。 我想要完成的是:

假设我有包含值的数据库列:

codes
 01,
 02,
 03,
 04,
 

还有一个能够像这样映射的函数:

{
 01 -> B
 02 -> C
 03 -> A
 04 -> D
}

我希望最终结果是这样的;

[03, 01, 02, 04]

我喜欢使用地图中的值而不是直接使用数据库中的值进行排序

【问题讨论】:

  • 你能展示一些关于你所拥有的代码吗?
  • 欢迎@Eldridge 10 exp 为您服务。

标签: database sorting grails mapping grails-orm


【解决方案1】:

我认为你可以这样做:

LinkedHashMap sorted = myMap.sort { a, b -> a.value <=> b.value }
ArrayList myList = sorted.keySet() as ArrayList

【讨论】:

    【解决方案2】:

    对于任何偶然发现这个问题的人。

    Orubel 提供的答案可行,但这意味着您正在对内存中的数据进行排序。

    也可以进行额外的查询,但随后需要处理 I/O 开销。

    不幸的是,这个问题没有完美的答案,但当不得不选择时,最好的解决方案是通过 I/O 进行处理,因为处理通常比通过远程连接进行处理要快

    我这样做的方式是用 SQL 编写它。 为了映射/转换我的数据,我使用了 SQL CASE 语句。(https://www.w3schools.com/sql/sql_case.asp) 然后将那段 SQL 放在 WITH 子句中以根据需要查询数据。 (https://www.geeksforgeeks.org/sql-with-clause/)

    这增加了 I/O,并不完美,但这是我的解决方案

    【讨论】:

    • 是的,但如果您已经拥有数据,您不想再进行查询。进行另一个调用和获取数据的 I/O 开销不仅仅是对您手头已有的数据进行排序。您总是希望先减少 I/O 开销,然后再进行处理......当在两者之间进行选择时,如果您已经拥有数据,请在本地处理而不是进行另一个查询。
    猜你喜欢
    • 2011-03-04
    • 2011-06-20
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2017-03-05
    相关资源
    最近更新 更多