특정 함수나 동작을 나타내기 위해 사용했던 함수 객체 - 낡은 기법
Collections.sort(words, new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
- 익명 클래스의 인스턴스를 함수 객체라고 함
- 익명 클래스 방식은 코드가 너무 길기 때문에 함수형 프로그래밍에 적합하지 않음
람다식
Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length()));
- 별도의 명칭을 지정해 정의해 주는 일반 함수와 달리 람다 함수는 이름 없이 그 내용물만 정의
- 매개변수 s1,s2의 타입을 명시하지 않았지만 컴파일러가 문맥을 보고 타입을 추론해줌
- 타입을 명시해야 코드가 더 명확할 때를 제외하고는 람다의 모든 매개변수 타입은 생략하자
비교자 생성 메서드
Collections.sort(words, comparingInt(String::length));
- 비교자 생성 메서드를 사용해 더 간결하게 만들 수 있음
- 각 문자열의 길이를 반환하는 메서드 참조를 사용
List 인터페이스의 sort 사용하기
words.sort(comparingInt(String::length));
람다 사용 예시