我想合併Java中的兩個對象列表。一個是來自數據庫的對象列表,第二個列表來自Excel。來自excel列表的數據庫的Java合併列表
對象的第一個列表包含類似的數據:
[name(str),valid_from(date),valid_to(date),active(flag)]
對象相等,如果名稱,有效標誌都是平等和OBJ1日期,OBJ 2 - VALID_FROM,失效日期是不相交的區間。
只有當活動標誌不相等時,列表中可以有兩個重疊的日期間隔和相同的名稱。對象的第二個列表包含相同的數據和有關是否要更新,刪除或第一名單上創造新的記錄也信息:
[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;
}
}
對象的類型究竟是什麼?他們都是'字符串'嗎? –
數據類型不是字符串,但對象ClassA包含字段:String,Date Valid From,Date Valid To,boolean active和ClassB具有相同的字段以及具有選項的枚舉操作類型[C(reate new)/ U(pdate)/刪除)。我的解決方案是假定數據庫中的對象格式正確,然後:1.構建Map - Map –
BlueLettuce16