2013-07-10 2 views
0

그래서 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 

위의 데이터는 약간 단순화되어 있으며 몇 가지 필드가 더 있으며 치료 일은 항상 연속 일이 아닐 수 있습니다. day 0,3,6,9 or day 0,7,14 ... 그리고 이것은 훨씬 더 큰 프로그램의 작은 부분입니다. 그래서 나는 객체들을 세트 형식으로 만들어야합니다. 나는에있어 : ​​

그것은 주로 I가 붙어있어 구문이, 난 그냥이 할 수있는 방법을 찾을 수없는 것, 나는 순간에 루프가

편집 각 개체를 통과해야 일반 SQL에서 미리

답변

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 루프를 사용하고, 그래서 이것은 당신이 그것을하고있는 방법입니다 수 있습니다 언급 한 바와 같이!

+0

예, 그 방법은 제가하는 일입니다. 나는 더 매끄러운 생각을 할 수 없다. 그래도 고마워 – Lissy

1

자바

내가 어떤 제안이나 코드 조각, 덕분에 매우 감사하게 될 거라고에서 이렇게하면 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 
+0

아니, 내가 SQL을 사용 해봤 의사 코드

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 } 

처럼

그래서 클래스가 애완 동물이 보일 수 있습니다, 일이 내 SQL 쿼리가 이미 30 선이다, 다른 테이블에서이 모든 정보를 가져 오기 때문입니다. 여러 행을 결합하는 방법을 찾지 못했습니다. – Lissy

0

결과 DAO를 반복하는 동안. 키가 petId 인지도를 유지합니다 (고유하다고 가정합니다). 값은 Pet 개체입니다. 그래서 여기

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 

     } 
    } 
관련 문제