Java でオブジェクトの 2 つのリストをマージしたいと思います。1 つはデータベースからのオブジェクトのリストで、2 番目のリストは Excel からのものです。
オブジェクトの最初のリストには、次のようなデータが含まれます。
[name(str),valid_from(date),valid_to(date),active(flag)]
名前、アクティブなフラグが等しく、obj1、obj2 - valid_from、valid_to の日付が互いに素な間隔である場合、オブジェクトは等しいです。
アクティブなフラグが等しくない場合にのみ、重複する日付間隔と同じ名前を持つ 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;
}
}