124p 3.7.3 3단계 부분! #40
-
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 1 reply
-
![]()
|
Beta Was this translation helpful? Give feedback.
-
질문 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); //이런 식으로 객체 인스턴스에 관계없이 바로 사용가능
}
} |
Beta Was this translation helpful? Give feedback.
-
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));
}
|
Beta Was this translation helpful? Give feedback.
질문 1.
우선 2가지 말씀드리자면,
그래서
Comparator는 Comparable 키를 추출해서 Comparator 객체로 만드는 Function 함수를 인수로 받는 정적 메서드 comparing을 포함한다.
라는 말은