在java中对集合数组列表对象的集合进行排序

时间:2013-04-06 00:17:13

标签: java sorting arraylist

    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'
                        }
                     }
    }

3 个答案:

答案 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的详细信息,请参阅ComparableCollections.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();

因此,您的解决方案将始终是粗略的,不可扩展的。

我建议改变设计。