람다식은 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));
}