[Java] ArrayList안에 HashMap 저장
2023. 3. 25. 13:01ㆍ프로그래밍/Java
특정 데이터를 ArrayList안에 HashMap 저장하려고 한다.
data: {
categories: [
0:{
"ko_name": "책",
"code": "book"
},
1:{
"ko_name": "슬픔",
"code": "sadness"
}
]
}
데이터를 이런식으로 뽑아줘야 하는 경우가 있다고 쳐보자.
ArrayList안에 hash맵이 들어가는 데이터 형식을 선언하고 이를 ko_name따로, code 따로 분리해서 저장하려 했다. (이후 이를 categories라는 Dto에 매핑해준다.)
public static final ArrayList<HashMap<String,String>> categoryCodeResponse= new ArrayList<>();
@PostConstruct
public static void categoryMap(){
for (Category category :categoryValueList) {
HashMap<String,String> koName= new HashMap<>();
koName.put("ko_name",category.getKoreanMessage());
HashMap<String,String> code= new HashMap<>();
koName.put("code",category.getCode());
categoryCodeResponse.add(koName);
categoryCodeResponse.add(code);
categoryCodeList.add(category.getCode());
}
}
이 경우 데이터가 원하는 형식이 아니라 이렇게 출력된다.
{
"statusCode": 200,
"message": "success",
"data": {
"categories": [
{
"code": "art",
"ko_name": "예술"
},
{},
{
"code": "biography",
"ko_name": "전기"
},
{},
{
"code": "business",
"ko_name": "비즈니스"
},
{},
{
"code": "children",
"ko_name": "어린이"
},
{},
{
"code": "comics",
"ko_name": "만화"
..
중간에 빈 hashMap들이 보인다.
이렇게 되는 이유는
내가 hashMap을 잘못 이해하고있나했더니 그냥 koName에 두번 할당해주고 code에는 할당을 안해줘서 code는 빈 인스턴스인 채로 추가 돼서 그렇다...
hashMap의 문제가 아니라 그냥 코드 복붙하다 에러낸거였다.. (글을 작성하던 중간에 눈치챔)
사실 저기서 그냥 koName.put("code",category.getCode()); -> code.put("code",category.getCode());로 바꾸면 정상적으로 동작하겠지만 더 좋은 방식은 아래 방식이다.
public static final ArrayList<HashMap<String,String>> categoryCodeResponse= new ArrayList<>();
@PostConstruct
public static void categoryMap(){
for (Category category :categoryValueList) {
HashMap<String,String> categoryMap = new HashMap<>();
categoryMap.put("ko_name", category.getKoreanMessage());
categoryMap.put("code", category.getCode());
categoryCodeResponse.add(categoryMap);
categoryCodeList.add(category.getCode());
}
}
글을 쓰고나니 허무하다
내가 로직상의 오류를 발견해서 리팩토링한건줄 알았는데
복붙하다 오타낸거라니
여러분은 변수명을 잘 확인하도록 하자