[JAVA] Collections.sort()사용해서 정렬하기

yeonjoo913·2023년 12월 11일

JAVA

목록 보기
18/19

이전 글에서 이어 파일 처리를 할 때 파일 등록순에 따라 정렬이 필요하여 사용해보았다. 먼저 Collections.sort()를 사용하게된 이유부터 정리해보았다.

Collections.sort vs Arrays.sort 차이

  • Arrays.sort() : 배열을 정렬
    • 시간복잡도 : 평균 : O(NlogN) / 최악 : O(N^2)
  • Collections.sort() : 객체를 정렬
    • 시간복잡도 : 평균, 최악 : O(NlogN)
    • Collections.sort(List list): 기본 정렬 기준으로 정렬한다.
    • Collections.sort(List list, Comparator): Comparator 인터페이스를 구현한 인스턴스에서 지정한대로 정렬한다.

Comparable vs Comparator 차이

  • Comparable : 자기 자신과 매개 변수 객체를 비교
  • Comparator : 두 매개변수 객체를 비교

=>
파일이름의 경우 "파일이름_yyyyMMddHHmmss(LocalDateTime).xlsx"의 형식을 사용하고 있다.

ex ) testData_202311110101.xlsx

File List이고, 파일간의 비교가 필요했기에 Collections.sort(List list, Comparator)를 사용하여 비교하였다.

Collections.sort(workList, new Comparator<File>() {
  @Override
  public int compare(File file1, File file2) {
      String fileName1 = file1.getName();
      String fileName2 = file2.getName();

      LocalDateTime dateTime1 = parseDateTimeFromFileName(fileName1);
      LocalDateTime dateTime2 = parseDateTimeFromFileName(fileName2);

      return dateTime1.compareTo(dateTime2);
  }
});

private LocalDateTime parseDateTimeFromFileName(String fileName) {
    String[] dateTimeString = fileName.replace(".xlsx","").split("_");
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    if (dateTimeString.length > 0) {
        return LocalDateTime.parse(dateTimeString[dateTimeString.length - 1], formatter);
    }
    return null;
}

workList의 파일 목록에서 등록 오름차순으로 파일을 처리하도록 하였다.

profile
주니어 백엔드 개발자. 까먹는다 기록하자!

0개의 댓글