본문 바로가기
프로그래밍/Java

[Java] ArrayList안에 HashMap 저장

by 물고기고기 2023. 3. 25.

특정 데이터를 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());
        }
    }

 

글을 쓰고나니 허무하다

내가 로직상의 오류를 발견해서 리팩토링한건줄 알았는데

복붙하다 오타낸거라니

여러분은 변수명을 잘 확인하도록 하자

댓글