// 1. Comparator 함수 디스크림터는 (T, T) -> intinventory.sort((Apple a1,Apple a2) ->a1.getWeight() -a2.getWeight());//2. 자바 컴파일러는 람다 표현식이 사용된 콘텍스트를 활용해서 람다의 파라미터 형식을 추론inventory.sort((a1, a2) ->a1.getWeight() -a2.getWeight());//3. comparing 메서드 사용importstaticjava.util.Comparator.comparing;inventory.sort(comparing(apple ->apple.getWeight()));
4단계: 메서드 참조 사용
메서드 참조를 이용하면 람다 표현식의 인수를 더 깔끔하게 전달할 수 있다.
inventory.sort(comparing(Apple::getWeight));
람다 표현식 조합 유용 메서드
Comparator
정적 메서드 Comparator.comparing를 이용해서 비교에 사용할 키 추출
// 역정렬inventory.sort(comparing(Apple::getWeight).reversed());// Comparator 연결(thenComparing 메서드로 두 번째 비교자 만들기)inventory.sort(comparing(Apple::getWeight).reversed().thenComparing(Apple::getContry));
Predicate
복잡한 Predicate를만들 수 있도록 negate, and, or 세 가지 메서드 제공
// 기존 Predicate 객체 결과를 반전시킨 객체 생성 (negate)Predicate<Apple> notRedApple =redApple.negate();// 두 Predicate 를 연결해 새로운 Predicate 객체 생성//(and)Predicate<Apple> redAndHeavyApple =redApple.and(apple ->apple.getWeight() >150);//(or)Predicate<Apple> redAndHeavyOrGreen =redApple.and(apple ->apple.getWeight() >150).or(apple ->GREEN.equals(a.getColor()));
Function
Function 인스턴스를 반환하는 andThen, compose 두 가지 default 메서드 제공
//andThen (주어진 함수 결과를 다른 함수의 입력으로 전달하는 함수 반환)Function<Integer,Integer> f = x -> x +1;Function<Integer,Integer> g = x -> x *2;Function<Integer,Integer> h =f.andThen(g);int result =h.apply(1); // g(f(x)) -> 4//compose (인수로 주어진 함수를 먼저 실행한 후 그 결과를 외부 함수의 인수로 제공)Function<Integer,Integer> h =f.compose(g);int result =h.apply(1); // f(g(x)) -> 3