[英]Java: How to merge objects sort of
所以我有一个来自SQL数据库的DAO对象列表。
它们具有以下字段petId,petWeight,petAge,drugCode,drugStrength和dayOfTreatment。
我需要把它放到另一个对象中,每个宠物都会有一个对象(唯一的不同是一个对象需要多天,这是一个列表)
petId | petWeight | petAge | drugCode | drugStrength | dayOfTreatment
01 5kg 2years XCJJL 20mg 0
01 5kg 2years XCJJL 20mg 1
01 5kg 2years XCJJL 20mg 2
01 5kg 2years XCJJL 20mg 3
02 9kg 6years XUKKG 80mg 0
02 9kg 6years XUKKG 80mg 1
02 9kg 6years XUKKG 80mg 2
02 9kg 6years XUKKG 80mg 3
02 9kg 6years XUKKG 80mg 4
03 7kg 4years XDDDD 120mg 0
转换成:
petId | petWeight | petAge | drugCode | drugStrength | daysOfTreatment
01 5kg 2years XCJJL 20mg 0,1,2,3
02 9kg 6years XUKKG 80mg 0,1,2,3,4
03 7kg 4years XDDDD 120mg 0
在上面的数据中,该数据被简化了一些,还有更多字段,并且治疗的日期可能并不总是连续的,例如,第0,3,6,9天或第0,7,14天...这只是更大程序的一小部分,这就是为什么我必须将对象设置为固定格式。
这主要是我所坚持的语法,我只是找不到一种方法,现在遍历每个对象时都有一个循环
编辑:我必须在Java中执行此操作
我非常感谢您的任何建议或代码段,在此先感谢
粗略的方法可以像这样。
HashMap<String, petObject> petObjMap = new HashMap<String, petObject>();
for(PetObject petObject : petObjectList){
String id = petObject.getId();
PetObject groupedObj = petObjMap.get(id);
if( groupedObj == null ){
petObjMap.put(id, petObject);
}else{
groupedObj.setDayOfTreatment(groupedObj.getDayOfTreatment + "," + petObject.getDayOfTreatment());
}
}
但是正如您提到的那样,您已经在使用for
循环,所以这可能就是您这样做的方式!
在普通SQL中,您将使用group by petId, petWeight, petAge, drugCode, drugStrength
。 主要的挑战是如何生成daysOfTreatment
列。 据我所知,没有标准的SQL构造可以执行此操作,但是某些数据库供应商具有允许您执行此操作的特定功能。
例如,在MySQL中,您可以这样使用GROUP_CONCAT :
select petId,
petWeight,
petAge,
drugCode,
drugStrength,
group_concat(dayOfTreatment separator ',')
from <table name>
group by
petId,
petWeight,
petAge,
drugCode,
drugStrength
在迭代生成的DAO时。 保留一个映射,其键为petId(我想这是唯一的),其值为Pet对象。
所以宠物课可能看起来像
class Pet {
int petId;
int petWeightKg; //in kg
Map<String, PetDosage> dosage; //drugCode to PetDosage
//other getters and setters
}
class PetDosage {
int drugStrengthMg ;//mg
List<Integer> daysOfTreatment;
//other getters and setters
}
所以这是伪代码
Map<Integer, Pet> petIdToPet = ...
for (PetDAO petDAO : listPetDAOs) {
int id = petDAO.getId();
Pet pet = petIdToPet.get(id);
if (pet == null) { //woo new pet
petIdToPet.put(id, new Pet( .... ));
} else {
//Depending upon the other data
// update fields like dosage, days
//increment drugStrength,
//Add List of Days etc
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.