我想保留第一份清单的顺序
def myList = [444,1111,33333,22222]
但是,当我使用findAllBy
时,订单已更改
def myList2 = myDomain.findAllByRmIdInList(myList)
=>出:[1111,22222,333333,444]
默认情况下有一种方法可以停用订单吗?
谢谢
答案 0 :(得分:2)
如果您想保留列表的顺序,可以使用动态查找器' getAll()' (这是documentation)
检索指定域类的实例列表 id,由原始id列表排序。如果提供的某些ID是 null或没有这些id的实例,结果List将会 在这些职位上有空值。
所以你可以尝试下一个代码:
def myList2 = myDomain.getAll(myList)
评论后更新
您可以使用比较器。这有点棘手,但它应该有效。您将在下面找到一个示例:
def myList = [444,1111,33333,22222]
def mc = [compare: { a,b -> a.rmId == b.rmId ? 0 : myList.indexOf(a.rmId) < myList.indexOf(b.rmId) ? -1 : 1 } ] as Comparator
def myList2 = myDomain.findAllByRmIdInList(myList)
def results = myList2.sort(mc)
results.each() {
log.info(it.rmId)
}
希望有所帮助。
答案 1 :(得分:0)
你应该使用
def myList2 = MyDomain.findAllByRmIdInList(myList, [sort:"pmId"])
如果你想要你也可以通过命令“desc”或“asc”
注意:finders适用于不在控制器上的域。