-1

Java でオブジェクトの 2 つのリストをマージしたいと思います。1 つはデータベースからのオブジェクトのリストで、2 番目のリストは Excel からのものです。

  1. オブジェクトの最初のリストには、次のようなデータが含まれます。 [name(str),valid_from(date),valid_to(date),active(flag)]
    名前、アクティブなフラグが等しく、obj1、obj2 - valid_from、valid_to の日付が互いに素な間隔である場合、オブジェクトは等しいです。
    アクティブなフラグが等しくない場合にのみ、重複する日付間隔と同じ名前を持つ 2 つの要素がリストに存在する可能性があります。

  2. オブジェクトの 2 番目のリストには、同じデータと、最初のリストの新しいレコードを更新、削除、または作成するかどうかに関する情報が含まれています。 [name(str),valid_from(date),valid_to(date),active(flag), action_type(c/u/d)]

//編集:私のコードは:

public class ClassA {
    private String name;
    private Date validFrom;
    private Date validTo;
    private boolean active;

    public ClassA(String name, Date validFrom, Date validTo, boolean active) {
        this.name = name;
        this.validFrom = validFrom;
        this.validTo = validTo;
        this.active = active;
    }

    public String getName() {
        return name;
    }

    public Date getValidFrom() {
        return validFrom;
    }

    public Date getValidTo() {
        return validTo;
    }

    public boolean isActive() {
        return active;
    }

public static void main(String[] args) {
    List<ClassA> objectsFromDB = getObjectsFromDB();
    List<ClassB> objectsFromFile = getObjectsFromFile();

    Map<String, ClassA> objectNameToClassA = buildObjectNameToClassAMap(objectsFromDB);

    List<ClassA> objectsToCreate = new ArrayList<ClassA>();
    List<ClassA> objectsToUpdate = new ArrayList<ClassA>();
    List<ClassA> objectsToDelete = new ArrayList<ClassA>();

    for(ClassB object: objects) {
         ActionType actionType = object.getActionType();
         if(ActionType.CREATE.equals(actionType) {
             objectsToCreate.add(object.getObjectA());
         }
         if(ActionType.UPDATE.equals(actionType) {
             objectsToUpdate.add(object.getObjectA());
         }
         if(ActionType.DELETE.equals(actionType) {
             objectsToDelete.add(object.getObjectA());
         }
    }


}

    private static Map<String, ClassA> buildObjectNameToClassAMap(List<ClassA> objects) {
        Map<String, ClassA> result = new LinkedHashMap<String, ClassA>();
        for(ClassA object: objects) {
           result.put(object.getName(), object);
        }
        return result;
    }

}

enum ActionType {
    CREATE, UPDATE, DELETE;
}

class ClassB {
    private ClassA classA;
    private ActionType actionType;
    public ClassB(ClassA classA, ActionType actionType) {
        this.classA = classA;
        this.actionType = actionType;
    }

    public ClassA getClassA() {
         return classA;
    }

    public ActionType getActionType() {
        return actionType;
    }

}
4

1 に答える 1

0

まず、平等の条件を尊重するために equals メソッドをオーバーライドするオブジェクトのクラスを定義します。次に、Set インターフェイスを実装する java.util のクラスの 1 つ、たとえば HashSet を使用します。次に、オブジェクトでこのセットの add メソッドを使用します。集合演算では、加算は集合和集合であるため、マージが実行されます。

于 2013-01-24T16:14:28.450 に答える