0

以下の要件に対する最適なソリューションを探しています。

ClassA以下のようなクラスがあります

public class ClassA {
    protected List<ClassA.PlanA> planA;

    public List<ClassA.PlanA> getPricePlan() {
        if (planA == null)
            planA = new ArrayList<ClassA.PlanA>();
        return this.planA;
    }

    public static class PlanA {
        protected String code;
        protected XMLGregorianCalendar startDate;
        protected XMLGregorianCalendar endDate;

        // Getters and setters for the above fields
    }   
}

そして、私は の 2 つのオブジェクトを持ってい(obj1, ojb2)ますClassA。要件は、2 つのオブジェクトをマージし、重複を削除することです。

例:

ClassA obj1=[PlanA =[code=AAA, startDate=2010/12/10, endDate=2011/12/10], PlanA =[code=BBB, startDate=2010/12/10 endDate=<null>]] 

ClassA obj2=[PlanA=[code=AAA, startDate=2011/12/10], PlanA= [code=CC, startDate=2011/12/10 endDate=<null>], PlanA= [code=BBB, startDate=2010/12/10 endDate=2011/12/10]]

マージ後、結果は次のようになります。

ClassA obj3=[PlanA[code=AAA, startDate=2011/12/10], PlanA= [code=CC, startDate=2011/12/10 endDate=<null>],PlanA= [code=BBB, startDate=2010/12/10 endDate=<null>]}
4

1 に答える 1

2

equalsとを実装hashcodeするPlanA:

public static class PlanA {

    protected String code;
    protected XMLGregorianCalendar startDate;
    protected XMLGregorianCalendar endDate;

    @Override
    public boolean equals(Object obj) {
        return obj instanceof PlanA && obj.hashCode() == hashCode();
    }

    @Override
    public int hashCode() {
        return Arrays.hashCode(new Object[] { code, startDate, endDate });
    }

}

次に、次を使用しますSet

Set<ClassA.PlanA> merged = new HashSet<ClassA.PlanA>();
merged.addAll(obj1.getPricePlan());
merged.addAll(obj2.getPricePlan());

重複はSet自動的に削除されます。

于 2013-04-25T16:40:12.720 に答える