람다 표현식은 파라미터, 화살표, 바디로 이루어진다
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight);
└ 람다 파라미터 └ 바디
(String s) -> s.length()
(Apple a) -> a.getWeight() > 150
(int x, int y) -> {
System.out.println("Result : ");
System.out.println(x + y);
}
() -> 42
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())
Runnable r1 = () -> System.out.println("Hello World 1"); // 람다 사용
Runnable r2 = new Runnable() { // 익명 클래스 사용
public void run() {
System.out.println("Hello World 2");
}
}
// -----------------------------------------------------------------
public static void process(Runnable r) {
r.run();
}
// -----------------------------------------------------------------
process(r1); // Hello World 1 출력
process(r2); // Hello World 2 출력
process(() -> System.out.println("Hello World 3")); // Hello World 3 출력
어노테이션을 선언했지만 함수형 인터페이스가 아닐 경우 컴파일 오류가 발생한다
// 함수형 인터페이스 O
public interface Adder {
int add(int a, int b);
}
// 함수형 인터페이스 X
public interface SmartAdder extends Adder {
int add(double a, double b);
}
// 함수형 인터페이스 X
public interface Nothing {
}
Predicate<String> stringPreidacte = (String s) -> !s.isEmpty();
Consumer<Apple> appleConsumer = (Apple a) -> System.out.println(a.getWeight());
Function<String, Integer> stringFunction = (String s) -> s.length();
() -> new Apple();