날짜 열을 기준으로 csv 파일을 정렬해야합니다. 이것이 masterRecords 배열 목록의 모습입니다.
GBEP-1-2-4,FRAG,PMTypeEthernet,NEND,TDTN,15-MIN,Dec 15 2014 - 07:15:00 AM MYT,+0,COMPL
GBEP-1-2-1,FRAG,PMTypeEthernet,NEND,TDTN,15-MIN,Dec 15 2014 - 07:00:00 AM MYT,+0,COMPL
GBEP-2-2-1,FRAG,PMTypeEthernet,NEND,TDTN,15-MIN,Dec 15 2014 - 07:30:00 AM MYT,+0,COMPL
날짜 07:15:00, 07:30:00 등을 기준으로 정렬해야합니다. 정렬 할 코드를 만들었습니다.
// Date is fixed on per 15min interval
ArrayList<String> sortDate = new ArrayList<String>();
sortDate.add(":00:");
sortDate.add(":15:");
sortDate.add(":30:");
sortDate.add(":45:");
BufferedWriter bw = new BufferedWriter(new FileWriter(tempPath + filename));
for (int k = 0; k < sortDate.size(); k++) {
String date = sortDate.get(k);
for (int j = 0; j < masterRecords.size(); j++) {
String[] splitLine = masterRecords.get(j).split(",", -1);
if (splitLine[10].contains(date)) {
bw.write(masterRecords.get(j) + System.getProperty("line.separator").replaceAll(String.valueOf((char) 0x0D), ""));
masterRecords.remove(j);
}
}
}
bw.close();
위에서 볼 수 있듯이 첫 번째 배열 (sortDate)을 통해 반복되고 masterRecord 인 두 번째 배열에서 다시 반복되어 새 파일에 기록됩니다. 새 파일이 정렬되면서 작동하는 것 같지만 내 masterRecord에 10000 개의 레코드가 있음을 알 수 있지만 새 파일을 만든 후 레코드가 5000으로 축소되어 마스터 목록에서 레코드를 제거하는 방법을 가정합니다. 왜 그럴까요?
루프 내부의 항목을 제거하는 것은 안전하지 않습니다. Iterator를 통해 배열을 반복해야합니다. 예를 들면 다음과 같습니다.
List<String> names = ....
Iterator<String> i = names.iterator();
while (i.hasNext()) {
String s = i.next(); // must be called before you can call i.remove()
// Do something
i.remove();
}
문서는 다음과 같이 말합니다.
이 클래스의 반복기 및 listIterator 메서드에 의해 반환되는 반복기는 실패하지 않습니다. 반복자가 생성 된 후 언제든지 목록이 구조적으로 수정되면 반복기의 자체 제거 또는 추가 메서드를 통하지 않는 한 반복기가 ConcurrentModificationException을 throw합니다. 따라서 동시 수정에 직면하여 반복자는 미래에 결정되지 않은 시간에 임의의 비 결정적 동작을 위험에 빠뜨리지 않고 빠르고 깔끔하게 실패합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다