람다식은 메서드를 간략하고 명확하게 표현할 수 있게 해주며, 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, '익명 함수'라고도 한다.
메서드를 하나의 식(expression)으로 표현한 것
람다식은 메서드 이름이 없고 메서드를 실행하는데 필요한 매개변수와 매개변수를 활용한 실행코드를 구현하는 것으로 람다식을 구현하기 위해서는 함수형 인터페이스를 만들고 인터페이스 내부에 추상메서드가 단 하나만 존재해야 한다.
@FunctionalInterface
애노테이션 추가
💡 람다식 문법
- 매개변수 자료형 생략 가능(타입이 있을 경우 괄호와 함께 사용)
- 매개변수가 하나일 경우 괄호 생략
- 매개변수가 2개 이상인 경우 괄호 생략 X
- 중괄호 안의 문장이 한 문장인 경우 중괄호 생략가능
- return 생략 가능
람다식이 하나의 메서드만 호출하는 경우에는 메서드 참조(method reference)라는 방법으로 람다식을 간결하게 할 수 있다.
하나의 메서드만 호출하는 람다식은 클래스이름::메서드이름
또는 참조변수::메서드이름
으로 바꿀 수 있다.
Function<String, Integer> f = (String s) -> Integer.parseInt(s);
Function<String, Integer> f = Integer::parseInt; // 메서드 참조
BiFunction<String, String, Boolean> f = (s1, s2) -> s1.equals(s2);
BiFunction<String, String, Boolean> f = String::equals; // 메서드 참조
Supplier<MyClass> s = () -> new MyClass(); // 람다식
Supplier<MyClass> s = MyClass::new; // 메서드 참조
BiFunction<Integer, String, MyClass> bf = (i, s) -> new MyClass(i, s);
BiFunction<Integer, String, MyClass> bf2 = MyClass::new; // 메서드 참조
Function<Integer, int[]> f = x -> new int[x];
Function<Integer, int[]> f2 = int[]::new;
java.util.function
패키지함수형 인터페이스를 정의해 둔 패키지
T supplier() : T get()
Consumer : void accept(T t)
Function : R apply(T t)
Predicate : boolean test(T t)