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

我有两个对象(obj1, ojb2)ClassA要求是合并两个对象并删除重复项。

例子:

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());

ASet自动删除重复项。

于 2013-04-25T16:40:12.720 回答