java

java lambda(람다식) & sorting(소팅) 메서드

한땀코딩 2020. 6. 14. 21:24

람다식은 anonymous method라고도 불리는 java 8 부터 등장한 신문법이다. 이름이 없는 함수기 때문에 재사용이 불가하고, 간혹 남용으로 인해 비슷한 코드를 반복적으로 쓰는 문제가 생길 수도 있다고 한다.

public static void usingAnonymousInlineClass() {
        List<Book> books = Books.all();
        Collections.sort(books, new Comparator<Book>() {

            @Override
            public int compare(Book o1, Book o2) {
                // TODO Auto-generated method stub
                return o1.getTitle().compareTo(o2.getTitle());
            }
        });

        for (Book book : books)
            System.out.println(book);
    }

소팅 함수로 예를 들면, 원래는 이렇게 Comparator 인터페이스를 가져와서 오버라이드 하는 것이 가장 일반적인 방식이었다. 클래스 밖에서 메서드를 만들 방법이 없었기 때문이라고 한다. 그래서 인터페이스를 불러와서 그 안에 있는 함수를 오버라이딩 하는 방법을 택한 것이다.

람다를 활용하면 위의 긴 문법을 간단하게 정리할 수 있다.

// 긴 버전
public static void usingLamdasInLongForm() {
        List<Book> books = Books.all();
        Collections.sort(books, (Book b1, Book b2) -> {
            return b1.getTitle().compareTo(b2.getTitle());
        });

        for (Book book : books)
            System.out.println(book);
    }

// 짧은 버전
public static void usingLamdasInShortForm() {
    List<Book> books = Books.all();
    Collections.sort(books, (b1, b2) -> b1.getTitle().compareTo(b2.getTitle()));

    // java 의 forEach문
    books.forEach((book) -> System.out.println(book));
}