복습 - HashMap 연산
Coddy Java 여정의 논리와 흐름 섹션에 포함된 레슨 — 59개 중 21번째.
챌린지
쉬움<strong>processHashMap</strong>라는 이름을 가진 메서드를 생성하세요. 이 메서드는 한 개의 인수를 받습니다:
- products
<strong>products</strong>라는 이름의 HashMap으로:- 키는 제품 이름을 나타냅니다 (
String). - 값은 가격을 나타냅니다 (
Double).
- 키는 제품 이름을 나타냅니다 (
수행할 작업
- 가장 높은 가격의 제품을 찾으세요.
- 여러 제품이 동일한 최고 가격을 가진 경우, 그 중 하나를 반환하세요.
- HashMap이 비어 있는 경우, 빈 문자열 (
"")을 반환하세요.
- 가격이
<strong>50.00</strong>보다 큰 제품들을 필터링하여 새로운 HashMap에 저장하세요. - 모든 제품의 평균 가격을 계산하세요.
- HashMap이 비어 있는 경우, 평균은
0.0이어야 합니다.
- HashMap이 비어 있는 경우, 평균은
반환 형식
메서드는 다음 키-값 쌍을 포함하는 새로운 HashMap을 반환해야 합니다:
| 키 | 값 |
|---|---|
"Highest" | 가장 높은 가격의 제품 이름 (String). |
"Filtered" | 가격이 50.00보다 큰 제품들만 포함하는 HashMap (HashMap<String, Double>). |
"Average" | 모든 제품의 평균 가격 (Double). |
직접 해보기
import java.util.LinkedHashMap;
import java.util.HashMap;
import java.util.stream.Collectors;
import java.util.Scanner;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
public class Main {
public static HashMap<String, Object> processHashMap(HashMap<String, Double> products) {
// 여기에 코드를 작성하세요
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String productsString = scanner.nextLine();
// JSON 문자열을 HashMap으로 변환
Type mapType = new TypeToken<HashMap<String, Double>>(){}.getType();
HashMap<String, Double> products = new Gson().fromJson(productsString, mapType);
HashMap<String, Object> result = processHashMap(products);
// 일관된 출력을 보장하기 위해 Filtered 맵을 정렬
Map<String, Double> filteredMap = (Map<String, Double>) result.get("Filtered");
if (filteredMap != null && !filteredMap.isEmpty()) {
Map<String, Double> sortedFiltered = filteredMap.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(a, b) -> b,
LinkedHashMap::new
));
result.put("Filtered", sortedFiltered);
}
System.out.println(result);
}
}