Class ParentClass
{
private List<ChildClass>;
}
Class ChildClasss
{
private Date date;
}
List<ParentClass> parentClassList;
如何使用子类的Date属性对parentClassList对象进行排序?我可以使用比较器吗?
我的排序要求是: 我需要顶部的parentClassObject元素,它在子类对象中具有earliset日期。
例如:对象的Json表示法
{
'parentElement1':{
'childElement1':{
'date' : '2013-04-05'
}
},
'childElement2':{
'date' : '2013-03-01'
}
}
},
'parentElement2':{
'childElement1':{
'date' : '2013-04-01'
}
},
'childElement2':{
'date' : '2013-03-04'
}
}
}
答案 0 :(得分:0)
我可以使用比较器吗?
是的,你可以。
确切地说,如何做到这一点还不清楚......因为你的要求非常不清楚。但是,例如,根据每个第一个 ParentClass
实例ChildClass
的日期对date
个实例列表进行排序很简单。
Comparator
是否是正确的方法取决于上下文。正如Rajan所说:最好让ParentClass
实施Comparable<ParentClass>
。
伪代码:
int compareTo(other)
return -1, 0 or 1 depending on whether
this.earliestChildDate() < other.earliestChild(),
this.earliestChildDate() == other.earliestChild(), or
this.earliestChildDate() > other.earliestChild()
Date earliestChildDate()
for each childElement in this.children
date = smaller of date, childElement.date
return date
如果您缓存最早的子日期,那么排序会更快。
有关您需要分别实现和使用的API的详细信息,请参阅Comparable
和Collections.sort
的javadoc。 (如果您不知道javadocs的位置,Google“Java平台标准版7文档”并将页面加入书签。)
答案 1 :(得分:0)
我认为最好的方法是让ParentClass实现Comparable,并实现compareTo,以便它可以以所需的方式处理子类(例如,如果它是ChildClass,请注意date属性)。
答案 2 :(得分:0)
首先,这种设计并不适合您想要实现的目标。为什么父类需要来自子类的信息?这将导致您想要实现的非常粗略的实现。
当您说要创建父类列表并根据子类值对其进行排序时,首先要问的是如何创建父类对象?
如果你创建它:ParentClass p = new ParentClass();那么你的代码将无法工作,因为没有子类实例,因此没有日期。
因此,所有父类对象都将创建如下: ChildCLass c = new ChildClass(); ParentClass p =(ParentClass)p;
或
ParentClass p = new ChildClass();
因此,您的解决方案将始终是粗略的,不可扩展的。
我建议改变设计。