排序前的 Grails 映射值

Grails map values before sorting

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

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

codes
 01,
 02,
 03,
 04,
 

以及一个能够像这样映射的函数:

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

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

[03, 01, 02, 04]

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

嗯,我想你可以这样做:

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

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

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

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

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

我的做法是在 SQL 中写的。 对于 map/transform 我的数据,我使用了 SQL CASE 语句。(https://www.w3schools.com/sql/sql_case.asp) 然后将 SQL 的图片放在 WITH 子句中以根据需要查询数据。 (https://www.geeksforgeeks.org/sql-with-clause/)

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