<개인적인 내용 정리를 위한 포스팅으로 추후 내용이 추가되거나 변경될 수 있습니다>
Comparator는 기본적으로 하나의 추상 메서드만을 가지는 함수형 인터페이스입니다. 그래서 사용을 위해 다음 이미지와 같이 선언되어있는 추상 메서드인 int compare(T o1, T o2)를 구현하면 됩니다.
Comparator 인터페이스의 구현 내부를 살펴보면 compare 추상 메서드 외에도 다른 메서드들이 많이 선언되어 있는 것을 확인할 수 있습니다. 처음 해당 메서드들을 접했을 때는 메서드가 이렇게 많이 선언되어 있는데 왜 FunctionalInterface로 선언될 수 있는 건지 궁금했는데요. 기본적으로 Java에서 모든 클래스와 인터페이스는 Object 클래스에 선언되어 있는 메서드들을 상속받습니다. 또한 default 메서드 혹은 정적 메소드 같은 경우는 FunctionalInterface 선언에 영향을 주지 않기 때문에 정상적으로 함수형 인터페이스로 저희가 사용이 가능한 것이라고 이해하면 됩니다.
함수형 인터페이스로 선언되어 있기 때문에 아래 코드 예제처럼 람다 표현식이나 메서드 참조를 통해 사용될 수 있습니다.
// 2차원 배열 stream 변환 후 다시 2차원 배열로 변환하기
// given
int[][] data = new int[2][5];
// when
int[][] filteredData = Arrays.stream(data)
.filter(item -> item[0] < 10) // 배열 요소 중 첫번째 값이 10 미만인 요소들을 필터링
.toArray(int[][]::new); // 배열의 생성자는 IntFunction임을 기억해두자!!
// 2차원 배열의 요소들을 정렬하기 위해 Comparator 인터페이스의 compare 추상 메서드를
// 람다 표현식으로 구현하여 전달해서 정렬을 수행할 수 있다.
Arrays.sort(filteredData, (o1, o2) -> o1[0] - o2[0]));
'Language > Java' 카테고리의 다른 글
[Java] String to List (0) | 2022.11.07 |
---|---|
[Java] String to Integer, Integer to String (0) | 2022.10.09 |
배열(Array)과 리스트(List) (0) | 2022.10.09 |
java.util.Arrays 정리 (0) | 2022.10.09 |