HOME > java > utils

Java - Comparator로 정렬(Sorting)하는 방법

By JS | 31 Oct 2019

Comparator 객체를 생성하여 Collections나 배열 등을 정렬할 수 있습니다.

Comparator는 다음 두가지 방법으로 만들 수 있습니다.

  1. 익명 클래스
  2. 람다식

익명 클래스로 Comparator 생성

익명클래스로 Comparator를 생성할 수 있습니다. compare()의 리턴 값은 음수, 양수, 0이 될 수 있습니다. 음수가 리턴되면 오른쪽 인자가 아래로 내려갑니다.

public void comparatorExample1() {
    List<String> strings = new ArrayList<>();
    strings.add("This code is free software");
    strings.add("you can redistribute it");
    strings.add("under the terms of the GNU General Public License version 2 only");
    strings.add("This code is distributed in the hope that it will be useful");
    strings.add("Please contact Oracle");
    strings.add("500 Oracle Parkway, Redwood Shores, CA 94065 USA");

    // Sorting 하기 전에 출력
    for (String str : strings) {
        System.out.println(str);
    }

    // 문자 길이로 sorting (오름차순)
    Collections.sort(strings, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return s1.length() - s2.length();
        }
    });

    // sorting 후 출력
    System.out.println();
    for (String str : strings) {
        System.out.println(str);
    }
}

결과

This code is free software
you can redistribute it
under the terms of the GNU General Public License version 2 only
This code is distributed in the hope that it will be useful
Please contact Oracle
500 Oracle Parkway, Redwood Shores, CA 94065 USA

Please contact Oracle
you can redistribute it
This code is free software
500 Oracle Parkway, Redwood Shores, CA 94065 USA
This code is distributed in the hope that it will be useful
under the terms of the GNU General Public License version 2 only

람다식(Lambda)으로 Comparator 생성

익명 클래스는 람다식으로 표현할 수도 있습니다.

public void comparatorExample2() {
    List<String> strings = new ArrayList<>();
    strings.add("This code is free software");
    strings.add("you can redistribute it");
    strings.add("under the terms of the GNU General Public License version 2 only");
    strings.add("This code is distributed in the hope that it will be useful");
    strings.add("Please contact Oracle");
    strings.add("500 Oracle Parkway, Redwood Shores, CA 94065 USA");

    // Sorting 하기 전에 출력
    for (String str : strings) {
        System.out.println(str);
    }

    // 문자 길이로 sorting (오름차순)
    Collections.sort(strings, (s1, s2) -> s1.length() - s2.length());

    // sorting 후 출력
    System.out.println();
    for (String str : strings) {
        System.out.println(str);
    }
}

결과

This code is free software
you can redistribute it
under the terms of the GNU General Public License version 2 only
This code is distributed in the hope that it will be useful
Please contact Oracle
500 Oracle Parkway, Redwood Shores, CA 94065 USA

Please contact Oracle
you can redistribute it
This code is free software
500 Oracle Parkway, Redwood Shores, CA 94065 USA
This code is distributed in the hope that it will be useful
under the terms of the GNU General Public License version 2 only

참고