2013-04-06 116 views
0
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' 
         } 
        } 
    } 
+0

爲什麼ParentClass中不是'private Date date'呢? – 2013-04-06 00:20:48

+0

由於每個ParentClass都有多個子對象,因此您是否會根據每個ParentClass的子對集合的最早日期或最近日期比較兩個ParentClass對象? – phatfingers 2013-04-06 00:39:06

回答

0

我可以用比較本的JSON對象?

是的,你可以。

準確地說你如何做到這一點目前還不清楚......因爲你的要求很不明確。然而,例如,根據每個人的日期第一個ChildClass實例的date來排序ParentClass個實例的列表將是簡單的。

Comparator是否是正確的做法取決於上下文。正如Rajan所說:製作ParentClassComparable<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的ComparableCollections.sort,以瞭解您需要分別實施和使用的API的詳細信息。 (如果你不知道javadocs在哪裏,谷歌「Java平臺標準版7文檔」併爲頁面添加書籤。)

+0

你可以給這個僞代碼嗎?我懷疑我們是否可以做到這一點。 – Lokesh 2013-04-06 03:34:50

+0

@Lokesh - 除非您澄清您的要求,否則不會。 – 2013-04-06 06:16:16

+0

我編輯了我的問題以提供更多詳細信息,您能否讓我更深入地瞭解如何在父母和子女身上實施比較。 – 2013-04-06 08:01:04

0

我認爲最好的方法是讓ParentClass實現Comparable,並實現compareTo,以便它可以以所需的方式處理子類(例如,如果它是一個ChildClass,請注意date屬性)。

0

首先,這種設計對你想達到的目標並不好。爲什麼父類會需要孩子類的信息?這將導致你想要實現的非常粗糙的實現。

當你說你想創建一個父類的列表並根據子類的值對它進行排序時,第一個問題是你如何創建父類對象?

如果您將其創建爲:ParentClass p = new ParentClass();那麼你的代碼將不會工作,因爲沒有子類實例,因此沒有日期。

所以,你所有的父類對象將被創建如下: ChildCLass c = new ChildClass(); ParentClass p =(ParentClass)p;

ParentClass p = new ChildClass();

因此,您的解決方案將始終是粗糙且不可擴展的。

我會建議改變設計。

+0

子類對象與父對象有一對多關係。 – 2013-04-06 07:48:32

相關問題