0
    Class ParentClass 
    {
     private List<ChildClass>;
    }

    Class ChildClasss
    {

    private Date date;
    } 

    List<ParentClass> parentClassList;

子クラスの Date 属性でparentClassListオブジェクトをソートするにはどうすればよいですか? これにコンパレータを使用できますか?

並べ替えの要件は次のとおりです。子クラスオブジェクトで最も早い日付を持つparentClassObject要素が一番上に必要です。

例: オブジェクトの JSON 表記

{
     'parentElement1':{
        'childElement1':{
           'date' : '2013-04-05'
                        }
                     },
         'childElement2':{
           'date' : '2013-03-01'
                        }
                     }
                  },
'parentElement2':{
        'childElement1':{
           'date' : '2013-04-01'
                        }
                     },
         'childElement2':{
           'date' : '2013-03-04'
                        }
                     }
    }
4

3 に答える 3

0

これにコンパレータを使用できますか?

はい、できます。

これを正確にどのように行うかは不明です...要件が非常に不明であるためです。ただし、たとえば、各インスタンスの最初のインスタンスのParentClass日付に基づいてインスタンスのリストを並べ替えるのは簡単です。 ChildClassdate

Comparatoraがこれを行う正しい方法であるかどうかは、コンテキストによって異なります。ParentClassRajan が指摘しているように、実装する方が良いかもしれません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 の詳細については、javadoc を参照してくださいComparableCollections.sort(javadocs がどこにあるかわからない場合は、Google の「Java Platform Standard Edition 7 ドキュメント」を参照して、ページをブックマークしてください。)

于 2013-04-06T00:35:50.810 に答える
0

最良の方法は、ParentClass に Comparable を実装させ、compareTo を実装して、サブクラスを目的の方法で処理できるようにすることだと思います (たとえば、ChildClass の場合は、日付属性に注意してください)。

于 2013-04-06T00:37:01.110 に答える
0

まず第一に、このデザインはあなたが達成したいことには適していません。親クラスが子クラスからの情報を必要とするのはなぜですか? これは、達成したいことの非常に大雑把な実装につながります。

親クラスのリストを作成し、子クラスの値に基づいて並べ替えたいと言うとき、最初の質問は、親クラス オブジェクトをどのように作成するかです。

次のように作成する場合: ParentClass p = new ParentClass(); 子クラスのインスタンスがなく、したがって日付がないため、コードは機能しません。

したがって、すべての親クラス オブジェクトは次のように作成されます。 ChildCLass c = new ChildClass(); 親クラス p = (親クラス) p;

また

ParentClass p = new ChildClass();

したがって、ソリューションは常に粗雑で拡張不可能になります。

デザインを変更することをお勧めします。

于 2013-04-06T03:40:40.203 に答える