Sorting 根据sting列表中的id对对象列表进行排序
我有一个使用Java7的grails应用程序。在这里,我有一个列表表和一个项目表,如下所示。这是一个多对多关系,其中List是父关系,对于规范化,我有List\u Item类,所以正常功能按预期工作Sorting 根据sting列表中的id对对象列表进行排序,sorting,grails,Sorting,Grails,我有一个使用Java7的grails应用程序。在这里,我有一个列表表和一个项目表,如下所示。这是一个多对多关系,其中List是父关系,对于规范化,我有List\u Item类,所以正常功能按预期工作 Class Parent{ static hasOne{list:List} } Class List{ .... static hasMany{item:Item} static hasOne{listOrder:ListOrder} } Class I
Class Parent{
static hasOne{list:List}
}
Class List{
....
static hasMany{item:Item}
static hasOne{listOrder:ListOrder}
}
Class Item{
Long id
.....
}
现在我必须存储列表中项目的顺序。所以我创建了以下结构
Class ListOrder{
Long id
List list
//Stores all the ids as a coma separated string in the necessary order
String order
}
因此,每次更改订单时,都会更新ListOrder记录
现在,我需要一种在检索列表或父类时使用存储的id对项目进行排序的方法。我希望通过名为“orderItems()”的列表域对象中的一个方法来实现这一点,当我调用此方法时,列表对象中的项参数将设置为排序列表对象
我心中的想法与下面的代码类似
Class List{
....
orderItems(){
this.item = this.item.sort(this.itemOrder.order.split(','))
}
....
}
我如何才能做到这一点,或者有更好的方法来实现这一点?根据要求,列表可以包含100多个项目,因此我选择不单独存储每个项目位置。不完全确定您在做什么。但只是把清单排序? 如果列表中的项目是对象,则可以按如下方式对这些对象字段中的任何一个进行排序
Class obj {
String name
String status
String desc
}
List objList = .... List of obj
obj.sort {a, b -> a.name <=> b.name} // Sort by name
obj.sort {a, b -> a.status <=> b.status} // Sort by status
obj.sort {a, b -> a.desc <=> b.desc} // Sort by desc
类obj{
字符串名
字符串状态
字符串描述
}
列表对象列表=。。。。obj列表
obj.sort{a,b->a.name b.name}//按名称排序
obj.sort{a,b->a.status b.status}//按状态排序
obj.sort{a,b->a.desc b.desc}//按desc排序
列表可以存储数百万项,所以不要创建字符串。不完全确定您在做什么。但只是把清单排序? 如果列表中的项目是对象,则可以按如下方式对这些对象字段中的任何一个进行排序
Class obj {
String name
String status
String desc
}
List objList = .... List of obj
obj.sort {a, b -> a.name <=> b.name} // Sort by name
obj.sort {a, b -> a.status <=> b.status} // Sort by status
obj.sort {a, b -> a.desc <=> b.desc} // Sort by desc
类obj{
字符串名
字符串状态
字符串描述
}
列表对象列表=。。。。obj列表
obj.sort{a,b->a.name b.name}//按名称排序
obj.sort{a,b->a.status b.status}//按状态排序
obj.sort{a,b->a.desc b.desc}//按desc排序
列表可以存储数以百万计的项目,所以不要创建字符串。我已经读过几遍了,我认为我理解最终用户想要实现的目标,并且认为这是他们试图管理有限的hasMany关系的某种自定义方式 这个过程有缺陷,我会解释原因 通过使用名为ids的字符串字段,该字段包含ID列表。您将只能真正地对列表进行排序,而不需要通过ID进行复杂的查询。一旦分开分类等,这是一种业余的关系思维方式 这就是为什么必须首先查找第一个对象。然后,一旦通过自己的流程得到迭代,就可以为应该映射的ID加载实际记录。这意味着在本例中,编写一个无缝工作的查询来查找挂起的特定给定关系将非常困难 而不是做你所有的这些
Class Example1 {
//Would have
// static hasMany = [ example2:Example2]
//but in your case
String examples2=1,2,10000001122,33222222332222,023222434343243,
//and so on
}
所以你有两个选择
Class Example1 {
//Would have
static hasMany = [ example2:Example2]
static constrains= {
example2:validator: checkExample
}
static def checkExample={val,obj,errors->
if (val && val.size()>100) {
errors.rejectValue('', "toomany.records", [''] as Object[], '')
}
}
}
以上将限制为100 hasMany,并允许您从主对象或反向对象进行无缝查询访问,前提是belongsTo已正确设置为反向
或者,如果你这样想的话,这是非常直接的:
class Example1 {
//nothing at all about example2 as yet
Set<Example2> getExample2BySortedGivenField() {
//either a set or a list that then you write your HQL
// or some specific query to return object by given sorting
return Example2.findAllByExample(this)
}
//you can have a few different onces if needed or a dynamic method that passes in what to sort by - the output will be what you have asked for in question
}
我已经读过几遍了,我认为我理解最终用户想要实现的目标,并且认为这是他们试图管理有限的hasMany关系的某种定制方式 这个过程有缺陷,我会解释原因 通过使用名为ids的字符串字段,该字段包含ID列表。您将只能真正地对列表进行排序,而不需要通过ID进行复杂的查询。一旦分开分类等,这是一种业余的关系思维方式 这就是为什么必须首先查找第一个对象。然后,一旦通过自己的流程得到迭代,就可以为应该映射的ID加载实际记录。这意味着在本例中,编写一个无缝工作的查询来查找挂起的特定给定关系将非常困难 而不是做你所有的这些
Class Example1 {
//Would have
// static hasMany = [ example2:Example2]
//but in your case
String examples2=1,2,10000001122,33222222332222,023222434343243,
//and so on
}
所以你有两个选择
Class Example1 {
//Would have
static hasMany = [ example2:Example2]
static constrains= {
example2:validator: checkExample
}
static def checkExample={val,obj,errors->
if (val && val.size()>100) {
errors.rejectValue('', "toomany.records", [''] as Object[], '')
}
}
}
以上将限制为100 hasMany,并允许您从主对象或反向对象进行无缝查询访问,前提是belongsTo已正确设置为反向
或者,如果你这样想的话,这是非常直接的:
class Example1 {
//nothing at all about example2 as yet
Set<Example2> getExample2BySortedGivenField() {
//either a set or a list that then you write your HQL
// or some specific query to return object by given sorting
return Example2.findAllByExample(this)
}
//you can have a few different onces if needed or a dynamic method that passes in what to sort by - the output will be what you have asked for in question
}
为什么所有的obj.sort迭代?为什么不
obj.sort{a,b->a.name b.name?:a.status b.status?:a.desc b.desc}
做同样的事情而不反复调用它,为什么所有的obj.sort迭代都是这样?为什么不obj.sort{a,b->a.name b.name?:a.status b.status?:a.desc b.desc}
做同样的事情,而不反复调用它呢