TIL - day7

정상화·2023년 2월 28일
0

TIL

목록 보기
4/46
post-thumbnail

Collections

자바의 라이브러리 중에는 미리 만들어진 자료구조를 사용할 수 있는 Collections 라이브러리가 있다.

웬만한 자료구조들은 거의 다 들어있다.(배열, 큐, 스택, 해쉬셋, 트리셋, 해쉬맵, 트리맵, 동시성해쉬맵, ....)

java.util.Collections 패키지에 들어있으므로 이걸 import해서 사용하면 된다.

정렬

데이터셋을 정렬할 때에 정렬기준이 있을 것이다. 정수를 정렬해도 내림차순, 오름차순으로 할 수도 있고, 학생들을 성적 순으로 정렬할 수도 있다.

데이터셋을 stream화 시킨후 sorted() 메서드를 호출하면 데이터가 갖고있는 기본 정렬방식으로 정렬된다.
sorted 메서드의 인수로 정렬을 할 람다함수 또는 익명 클래스를 넣어주게 되면 커스텀 정렬을 할 수 있다.

Schedule[] schedules = new Schedule[100];
Schedule[] sortedSchedules = Arrays
               .stream(schedules)
               .sorted((a, b) -> a.name.length() - b.name.length())
               .toArray(Schedule[]::new);

Schedule 배열을 스트림화 시키고 sorted 함수의 인자로 람다함수를 적어주었다.

a와 b는 비교를 할 두 Schedule 객체가 된다.
람다함수의 리턴값은 정수값인데 리턴값의 부호에 따라 비교대상의 순서를 결정한다.

  1. 리턴값이 같다: 순서를 유지한다.
  2. 리턴값이 양수다: a가 b보다 뒤로 가야한다.
  3. 리턴값이 음수다: a가 b보다 앞으로 가야한다.

필자는 스케줄의 name의 길이가 작은 순서대로 정렬을 하고 싶다.

a.name.length() - b.name.length()

여기서 만약 a의 이름이 b의 이름보다 길다면 위의 반환값은 양수가 된다.
양수이면 a는 b의 뒤로 가게 된다.
반대로 a의 이름이 b의 이름보다 짧다면 위의 반환값은 음수가 된다.
음수이면 a는 b의 앞에 있어야 한다는 의미이므로 순서가 그대로가 된다.

profile
백엔드 희망

0개의 댓글