124p 3.7.3 3단계 부분! #40
Replies: 3 comments 1 reply
질문 1.우선 2가지 말씀드리자면,
그래서 //Comparator 인터페이스 중 일부
//comparing 메서드
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)여기서 keyExtractor은 T타입의 객체를 입력 받아 U타입의 키를 반환하는 Function 함수인데 이것이 Comparable의 키를 추출하는 역할을 하는 것 같습니다. (Comparator<T> & Serializable) (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2))
그래서 제 생각은 comparing메서드를 구현해서 Function 함수로부터 키를 추출하고 그 추출한 키를 사용하여 객체를 비교하는 Comparator 객체를 생성한다는 말이 질문을 하셨던 말과 같은 것 같습니다. 질문 2질문 2의 메인 질문은 질문 1에서 어느정도 답변이 된 것 같습니다.
//기존 코드
Comparator.comparing((Apple a -> a.getWeight())
// 메서드 참조 사용
Comparator.comparing(Apple::getWeight)이런 식으로도 코드를 더 수정할 수도 있습니다.
public class MethodTest {
//정적 메서드
public static int multi(int a, int b){
return a * b;
}
//일반 메서드
public int add(int a, int b){
return a + b;
}
public static void main(String[] args) {
MethodTest test = new MethodTest();
test.add(1,2);
multi(1,2); //이런 식으로 객체 인스턴스에 관계없이 바로 사용가능
}
} |
0 replies
Answer selected by
Youngju-Jang
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
} |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment



질문 1.
우선 2가지 말씀드리자면,
그래서
Comparator는 Comparable 키를 추출해서 Comparator 객체로 만드는 Function 함수를 인수로 받는 정적 메서드 comparing을 포함한다.라는 말은