웹을 개발하다가 자바 제네릭을 쓰게되어 반복문을 돌려 내용을
수정할 일이 생겼다.
그러나 자꾸 ArrayList<ChatVO>의 내용을 수정하는데 자꾸 에러가 발생했다.
선언 후에 for문으로
for(ChatVO chatVO : chatList) 로 했을떄 에러가 발생해서 Iterator로 접근을 해보았다.
Iterator로 해도 될줄 알았지만 역시나 해결 불가했다.
이유는 원본의 chatList를 건드렸기 때문이다.
그래서 해결책으로 원본의 복제본을 만들어서 해결했다.
복제를 하고 iterator를 사용해보니 문제는 해결되었다.
chatList = chatMapper.getChatList(nowTime);
log.info("chatList: "+chatList);
Iterator<ChatVO> iter = ((ArrayList<ChatVO>) chatList.clone()).iterator();
int i=0;
while(iter.hasNext()) {
ChatVO chatVO1 = new ChatVO();
ChatVO chatVO2 = new ChatVO();
chatVO2 = iter.next();
log.info(i+"chatVO2: "+chatVO2);
chatVO1.setChatId(chatVO2.getChatId());
chatVO1.setChatName(chatVO2.getChatName());
chatVO1.setChatContent(chatVO2.getChatContent().replaceAll(" ", " ").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n", "<br>"));
int chatTime = Integer.parseInt(chatVO2.getChatTime().substring(11,13));
String timeType="오전";
if(Integer.parseInt(chatVO2.getChatTime().substring(11,13))>12) {
timeType="오후";
chatTime-=12;
}
chatVO1.setChatTime(chatVO2.getChatTime().substring(0, 11)+" "+timeType+" "+chatTime+":"+chatVO2.getChatTime().substring(14, 16)+"");
chatList2.add(chatVO1);
//iter.remove();
log.info(i+"chatList2: "+chatList2);
i++;
}
또 다른 문제가 발생했다.
ChatVO를 통해서 ArrayList에 삽입을 하는데 자꾸 앞에 넣었던 것들이 새로 삽입하는 것으로 덮어씌워지는 현상이 발생했다.
while 문 앞에서 ChatVO를 선언하고 그 변수를 while문 안에서 사용하니 그러한 현상이 발생했다.
따라서 해결을 위해 반복문 내에 선언을 해주고 매 번 만들어줘서 삽입해보니 문제는 해결됐다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java- 오버라이딩 (0) | 2019.07.07 |
---|---|
Java- 변수 초기화 (0) | 2019.07.07 |
Java- 생성자(Constructor) (0) | 2019.07.04 |
Java- 가변인자 (0) | 2019.07.04 |
Java - Overloading (0) | 2019.07.03 |