오늘은 선택 요구사항을 추가했다.
판매한 토탈금액을 출력하고 판매한 아이템들을 정리해서 출력하는 기능과, 주문 시 장바구니에서 같은 메뉴를 여러개 담으면 갯수로 표시되어 출려되도록 만들었다.
문제점
장바구니에 갯수표시 기능을 만들던 중 만드는 법을 몰라 막혔음.
시도해본 것들
-구글링해서 리스트에서 중복값을 개수를 세어주는 방법을 찾았고, Collection.frequency()를 이용해서 중복되는 값의 갯수를 가져오고, Set자료구조를 이용해 중복되는 값을 지우고 출력해 값마다 하나씩 이름과 금액 그리고 중복되는 갯수를 가져오려는 시도를 했다.
-Map자료구조를 이용해 리스트를 돌아가며 맵에 맞는 키값에 같은 메뉴가 있을 때마다 count를 올려주어 갯수를 체크해서 뒤에 따로 출 력 해줬다.
해결
결과적으로 Map을 이용해서 해결하였는데,
Map<String, Integer> map = new HashMap<String, Integer>();
for(Order bag:shoppingBag){
Integer cnt = map.get(bag.menuName); //해당 메뉴이름을 키값으로 count를 반환해온다.
if(cnt==null) //count에 값이 없을 시 1을 넣어준다.
map.put(bag.menuName,1);
else //같은 값이 나오면 카운트 증가
map.put(bag.menuName,cnt+1);
sum+=bag.getPrice(); //반복을 돌면서 전체 합산 가격을 미리 더해준다.
}
for (String key: map.keySet()) //Map을 돌면서 중복되지 않게 반복출력
{
int pay =0;
for(Order bag:shoppingBag){
if(key.equals(bag.menuName)) //해당 음식의 가격을 찾아서 가져온다.
pay=bag.price;
}
System.out.println(key+" |"+map.get(key)+"| "+ pay * map.get(key));
//해당음식의 이름 갯수 가격 출력
}
참고 : https://hianna.tistory.com/572
알게된 점
Map자료구조를 한번 공부해보고 많이 써보지 않았는데, 이런 예제에 써보고 사용방법이나 용도를 더 알게된것 같다.
그 외 알게된점
- frequency를 이용해서 해결하려 했지만 frequency는 문자열은 검사가 되었지만 객체들을 서로 비교하는것은 잘 동작하지 않았다.