# Table of Contents

# Comparator

배열을 정렬할 때는 기준이 있어야한다. 예를 들어 Person클래스가 있다고 가정하자.

class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Comparator를 사용하면 정렬의 기준을 정의할 수도 있다.













 
 
 
 
 
 



public class Main {

    public static void main(String[] args) {
        Person[] people = {
                new Person("Paul", 35),
                new Person("Monica", 23),
                new Person("Messi", 27),
                new Person("Jessica", 21),
                new Person("David", 40),
                new Person("Martin", 33)
        };

        Arrays.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();
            }
        });
    }
}

Java 8 부터는 다음과 같이 람다식으로 단축할 수 있다.










 

Person[] people = {
        new Person("Paul", 35),
        new Person("Monica", 23),
        new Person("Messi", 27),
        new Person("Jessica", 21),
        new Person("David", 40),
        new Person("Martin", 33)
};

Arrays.sort(people, (o1, o2) -> o1.getAge() - o2.getAge());

# Comparable

Comparable 인터페이스를 구현하는 방법도 있다. Person클래스의 age속성으로 정렬하도록 Comparable을 구현해보자.

class Person implements Comparable<Person> {

    // ...

    @Override
    public int compareTo(Person person) {
        return this.age - person.age;
    }
}

이제 다음과 같이 사용할 수 있다.

public class Main {

    public static void main(String[] args) {
        Person[] people = {
                new Person("Paul", 35),
                new Person("Monica", 23),
                new Person("Messi", 27),
                new Person("Jessica", 21),
                new Person("David", 40),
                new Person("Martin", 33)
        };

        Arrays.sort(people);
    }
}