특정 함수나 동작을 나타내기 위해 사용했던 함수 객체 - 낡은 기법

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()));

비교자 생성 메서드

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

List 인터페이스의 sort 사용하기

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

람다 사용 예시

public enum Operation {
    PLUS("+", (x, y) -> x+y);
    MINUS("-", (x,y) -> x-y);
    TIMES("*", (x,y) -> x*y);
    DIVIDE("/", (x,y) -> x / y);
    
    private final String symbol;
    private final DoubleBinaryOperator op;
    
    Operation(String symbol, DoubleBinaryOperator op) {
        this.symbol = symbol;
        this.op = op;
    }
    
    @Override
    public String toString() {
        return symbol;
    }
    
    public double apply(double x, double y) {
        return op.applyAsDouble(x, y);
    }
}