나는 얼마나 Comparator.comparing
함수가 작동하는지 이해하려고합니다. 나는 그것을 이해하기 위해 내 자신의 비교 방법을 만들었습니다.Java Lambda to comparator conversion - 중간 표현
private static <T,U extends Comparable<U>> Comparator<T> comparing(Function<T,U> f) {
BiFunction<T,T,Integer> bfun = (T a, T b) -> f.apply(a).compareTo(f.apply(b));
return (Comparator<T>) bfun;
}
이 함수의 마지막 행은 예외를 throw합니다. 내가
private static <T,U extends Comparable<U>> Comparator<T> comparing(Function<T,U> f) {
return (T a, T b) -> f.apply(a).compareTo(f.apply(b));
}
이 기능을 변경하는 경우
그러나, 그것은 예상대로 잘 작동합니다.
람다를 Comparator
으로 변환 할 수있는 두 번째 시도에서 사용하는 중간 기능 인터페이스는 무엇입니까?
람다가 변환하는 형식은 표현식이 해당 컨텍스트에서 있어야하는 형식입니다. 첫 번째 예제에서 람다는 할당 된 변수 유형이므로 람다를 'BiFunction'으로 변환해야합니다. 두 번째 예제에서 람다는 메서드의 반환 유형이기 때문에 'Comparator'로 변환해야합니다. 'BiFunction'과'Comparator'는 같은 모양을 가지기 때문에 같은 람다는 문맥에 따라 달라질 수 있습니다. 그러나 서로 다른 타입을 사용하기 때문에 서로 섞는 것이 실패 할 것입니다. –
나는 이것을 downvoting 해요. 품질에 대한 것이 아니라이 질문에 대한 감사가 있었기 때문에 * 3 개의 *가 실패했습니다. –