[Java] List 반복문으로 add 할 때 동일한 값 출력될 때
2022. 2. 8. 15:10

- 기존의 코드

List<Map<String, Object>> valueList = service.getValueList();

List<Map<String, Object>> testList = new ArrayList<>();
Map<String, Object> testMap = new HashMap<>();
for(int i = 0; i < valueList.size(); i++) {
    testMap.put("test_column1", valueList.get(i).get("test_column1"));
    testMap.put("test_column2", valueList.get(i).get("test_column2"));
    testList.add(testMap);
}

- 만약 service.getValueList()에서 3개의 다른 값을 가져와서 valueList에서 담았을 때, 필요한 값만 빼서 testList에 옮겨 담으려고 할때 

 

"testList": [
        {
            "test_column1": "apple_1",
            "test_column2": "banana_1"
        },
        {
            "test_column1": "apple_1",
            "test_column2": "banana_1"
        },
        {
            "test_column1": "apple_1",
            "test_column2": "banana_1"
        }
    ]

- 다음과 같이 3개가 같은값으로 출력되는 오류가 발생한다.

 

- 수정된 코드

List<Map<String, Object>> valueList = service.getValueList();

List<Map<String, Object>> testList = new ArrayList<>();
Map<String, Object> testMap = new HashMap<>();
for(int i = 0; i < valueList.size(); i++) {
    testMap.put("test_column1", valueList.get(i).get("test_column1"));
    testMap.put("test_column2", valueList.get(i).get("test_column2"));
    testList.add(testMap);
    testMap = new HashMap<>(); // <-- 초기화
}

- 새롭게 초기화를 시켜서 넣어주면 

"testList": [
        {
            "test_column1": "apple_1",
            "test_column2": "banana_1"
        },
        {
            "test_column1": "apple_2",
            "test_column2": "banana_2"
        },
        {
            "test_column1": "apple_3",
            "test_column2": "banana_3"
        }
    ]

- 원하는 대로 출력이 된다.

 


참조 https://senni.tistory.com/39