排序前的 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 并且并不完美,但这是我的解决方案
是否有可能在 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 并且并不完美,但这是我的解决方案