Notice
Recent Posts
Recent Comments
Link
티끌모아 태산
ArrayList에서 .add하면 모든 row의 값이 동일하게 입력되는 문제 본문
setVertexList(new_row)함수에서 발생한 문제였다.
처음에는 new_row.clear()로 초기화를 했다고 생각했다.
new_row.clear()는 값은 비워주었지만 계속 같은 주소를 가리키고 있기때문에
이후에 다른 데이터를 집어넣으면 그 데이터만을 가리키게된다.
따라서 new연산자를 이용해 새로운 객체를 생성해줘야하는 문제였다.
ArrayList<ArrayList<String>> newData = new ArrayList<ArrayList<String>>(); //truckPath table에 들어갈 전체 data
ArrayList<String> new_row = null; //truckPath table의 row한 개
CSVRecord cur_row = null; //csv파일에서 현재 읽은 row
CSVRecord pre_row = null; //csv파일에서 이전에 읽은 row
private static voud runThis(){
for (int row = 0; row < records.size(); row++) {
cur_row = records.get(row);
if (cur_row.get(2).equals(pre_row.get(2))) {
updateNewRow(new_row, cur_row);
setVertexList(new_row);
newData.add(new_row); // 현재 row를 newData에 add
}
}
}
private static ArrayList<String> setNewRow(ArrayList<String> new_row, CSVRecord cur_row) {
//new_row.clear()
new_row = new ArrayList<String>();
new_row.add(cur_row.get(0)); // uid
new_row.add("[" + cur_row.get(5) + ", " + cur_row.get(6) + "]"); // vertexList
new_row.add(cur_row.get(1)); // startTime
new_row.add(cur_row.get(1)); // endTime
new_row.add(cur_row.get(1).split(" ")[0]); // regDate
new_row.add(cur_row.get(2)); // groupId
return new_row;
}
private static ArrayList<String> updateNewRow(ArrayList<String> new_row, CSVRecord cur_row) {
// vertexList += 새 좌표
String vertexList = new_row.get(1);
vertexList += ",[" + cur_row.get(5) + ", " + cur_row.get(6) + "]";
new_row.set(1, vertexList);
// endTime설정
new_row.set(3, cur_row.get(1));
return new_row;
}
여기서 해답을 얻을 수 있었다.
'코딩 > JavaScript' 카테고리의 다른 글
[Eclipse] JavaScript 에디터가 안먹을 때 (0) | 2022.04.19 |
---|---|
[Spring] JavaScript에서 ArrayList<HashMap<String, Object>>형 객체 각 인덱스 접근 (0) | 2022.03.02 |
datatable 활용하기 (0) | 2022.03.02 |