所以我有一个来自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中执行此操作
我非常感谢任何建议或代码片段,在此先感谢
答案 0 :(得分:3)
粗略的做法就是这样。
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
循环了,所以这可能就是你这样做的方式!!
答案 1 :(得分:1)
在纯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
答案 2 :(得分:0)
迭代生成的DAO。保留一个键为petId的Map(我认为这是唯一的),值为Pet对象。
所以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
}
}