람다와 스트림

익명 클래스보다 람다 사용

JDK 1.1이 등장하면서 함수 객체를 만드는 주요 수단은 익명 클래스가 됐다.

//익명 클래스의 인스턴스를 함수 객체로 사용
//낡은 기법

//Comparator interface가 정렬 담당하는 추상 전략 뜻함
Collections.sort(words, new Comparator<String>(){ 
//문자열 정렬하는 구체적 전략을 익명 클래스로 구현
	public int compare(String s1, String s2){
		return Integer.compare(s1.length(), s2.length());
	}
});

→ 익명 클래스 방식은 코드가 너무 길어 자바는 함수형 프로그래밍에 적합하지 않음

→ 자바 8부터 추상 메서드 하나짜리 인터페이스는 특별 대우를 받게 됨

람다식을 사용해 함수형 인터페이스들의 인스턴스 만들기

Collections.sort(words, (s1,s2) -> Integer.compare(s1.length(), s2.length()));

람다 자리에 비교자 생성 메서드 사용

Collections.sort(words, comparingInt(String::length));

List 의 sort 메서드 이용

words.sort(comparingInt(String::length));