2012-01-07 1 views
0

편집이 있습니다 가능성이 문제를 일으키는 코드의 라인을 잊었 (수면 도움이;)예기치 않은 결과를

이 좋아 그렇게 나는 아마 여기에 근본적인 뭔가가있어 늦게 그러나 이것은 내 문제입니다 :

 
retail_store_id basket_item_id price_txt 
1   2  8.99 
1   1  1.5 
1   6  11.09 
1   4  3.99 
2   6  10.99 
2   2  9 
2   1  1.79 
3   4  2.99 
3   1  1.5 
4   1  1.39 
4   6  9.99 
4   4  3.5 
4   2  7.99

가 지금은 목록 항목이 포함 된 저장소 클래스가 각 basketitem는 가격이 : 내 DB를 쿼리하고 다음과 같습니다 데이터 세트를 얻을 수 있습니다

. 어떤 이유로 지금

Map<Integer, Store> shoppedBasketHash = new HashMap<Integer, Store>(); 
    while (rs.next()){ 
      int storeID = rs.getInt("retail_store_id"); 

      basketItem = new BasketItem(); 
          basketItem = GlobalHashOfItems.get(rs.getInt("basket_item_id")); 
      basketItem.price = new BigDecimal(rs.getString("price_txt")); 

      if(shoppedBasketHash.containsKey(storeID)){ 
       shoppedBasketHash.get(storeID).items.add(basketItem);     
      }else{ 

       Store store = new Store(); 
       store.retailStoreID = rs.getInt("retail_store_id"); 

       store.items = new ArrayList<BasketItem>(); 
       store.items.add(basketItem); 

       shoppedBasketHash.put(storeID, sb); 
      } 
     } 
    return new ArrayList<Store>(shoppedBasketHash.values()); 

가, 나중에 나는이 목록 걸릴 경우에 : 9.99

:

for(Store s: listOfStores){ 
     for(BasketItem b: s.items){ 
         System.out.println(b.price); 
        } 
     } 

을 나는이 얻을 지금

내 DTO 년대에 그것을 얻기 위해 나는이 작업을 수행

3.5

.99

7.99

1.39

3.5

3.5

7.99

,210

1.39

1.39

17,451,515,나는에 갔다 가격의 동일한 목록이 아닌

1.39

9.99

을. 어떻게 내가 잘못하고 있는가?

이제는 문제가 있다는 것을 알고 있습니다. basketItem = GlobalHashOfItems.get (rs.getInt ("basket_item_id"));

나는 가격을 추가해야하는 DB에서 가져온 다른 항목 정보가 들어있는 항목의 해시 (가격 없음)가 있습니다. 하지만 값으로 복사하는 것이 아니라 객체 참조를 사용하는 것입니다. 어떻게 basketItem을 참조가 아닌 GlobalHashOfItems 항목의 값에 할당하게합니까?

답변

0

HashMapArrayList으로 변환되어 삽입 될 때 삽입/반복 순서가 유지되지 않습니다.

Map을 추가로 사용하는 동안 ArrayList을 빌드하여 해결할 수 있습니다.

또 다른 방법은 삽입/반복 순서를 유지하는 LinkedHashMap을 사용하는 것입니다.

+0

감사합니다. 반환 문이 문제 일 수 있으며 전에 값()을 사용하지 않았다고 생각했습니다. 그러나 나는 이것을 시도했다 : \t \t'List stores = new ArrayList (); \t \t 세트 keys = shoppedBasketHash.keySet(); \t \t (정수 i : 키) { \t \t \t stores.add (shoppedBasketHash.get (i)); \t \t} \t \t \t \t 반환 저장,' \t \t 난 아직도 –

+0

@PiersMacDonald, 당신의 시도는 같은 문제가 앓고 같은 결과를 얻고있다; 반복 (정렬되지 않은)'Map'과'Set'는 무작위 순서입니다. 당신의 목표가 resulset의 순서를 재현하는 것이라면, 맵에 저장소를 넣을 때'ArrayList'에 추가하십시오. 위와 같이 키 값에 대한 결과를 정렬하는 것이 목표라면 'TreeMap'과 같은 정렬 된 맵을 사용하여 결과를 얻을 수 있습니다. (물론 store.items()의 iteratino 시퀀스에도 동일하게 적용됩니다.) – rsp