在java中对收集数组列表对象的集合进行排序
Class ParentClass
{
private List<ChildClass>;
}
Class ChildClasss
{
private Date date;
}
List<ParentClass> parentClassList;
如何排序parentClassList对象与子类的Date属性?我可以使用比较器吗?在java中对收集数组列表对象的集合进行排序
我的排序要求是: 我需要在子类对象中具有earliset日期的顶部的parentClassObject元素。
例如:对象
{
'parentElement1':{
'childElement1':{
'date' : '2013-04-05'
}
},
'childElement2':{
'date' : '2013-03-01'
}
}
},
'parentElement2':{
'childElement1':{
'date' : '2013-04-01'
}
},
'childElement2':{
'date' : '2013-03-04'
}
}
}
我可以用比较本的JSON对象?
是的,你可以。
准确地说你如何做到这一点目前还不清楚......因为你的要求很不明确。然而,例如,根据每个人的日期第一个ChildClass
实例的date
来排序ParentClass
个实例的列表将是简单的。
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
如果缓存的最早日期孩子那么排序会更快。
请分别参阅javadocs的Comparable
和Collections.sort
,以了解您需要分别实施和使用的API的详细信息。 (如果你不知道javadocs在哪里,谷歌“Java平台标准版7文档”并为页面添加书签。)
你可以给这个伪代码吗?我怀疑我们是否可以做到这一点。 – Lokesh 2013-04-06 03:34:50
@Lokesh - 除非您澄清您的要求,否则不会。 – 2013-04-06 06:16:16
我编辑了我的问题以提供更多详细信息,您能否让我更深入地了解如何在父母和子女身上实施比较。 – 2013-04-06 08:01:04
我认为最好的方法是让ParentClass实现Comparable,并实现compareTo,以便它可以以所需的方式处理子类(例如,如果它是一个ChildClass,请注意date属性)。
首先,这种设计对你想达到的目标并不好。为什么父类会需要孩子类的信息?这将导致你想要实现的非常粗糙的实现。
当你说你想创建一个父类的列表并根据子类的值对它进行排序时,第一个问题是你如何创建父类对象?
如果您将其创建为:ParentClass p = new ParentClass();那么你的代码将不会工作,因为没有子类实例,因此没有日期。
所以,你所有的父类对象将被创建如下: ChildCLass c = new ChildClass(); ParentClass p =(ParentClass)p;
或
ParentClass p = new ChildClass();
因此,您的解决方案将始终是粗糙且不可扩展的。
我会建议改变设计。
子类对象与父对象有一对多关系。 – 2013-04-06 07:48:32
为什么ParentClass中不是'private Date date'呢? – 2013-04-06 00:20:48
由于每个ParentClass都有多个子对象,因此您是否会根据每个ParentClass的子对集合的最早日期或最近日期比较两个ParentClass对象? – phatfingers 2013-04-06 00:39:06