grails:使用findAllBy时保持列表顺序

时间:2014-09-22 09:26:42

标签: list grails findall

我想保留第一份清单的顺序

def myList = [444,1111,33333,22222]

但是,当我使用findAllBy时,订单已更改

def myList2 = myDomain.findAllByRmIdInList(myList)

=>出:[1111,22222,333333,444]

默认情况下有一种方法可以停用订单吗?

谢谢

2 个答案:

答案 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适用于不在控制器上的域。