[java] 함수형 인터페이스를 사용하여 객체를 필터링하는 방법은 어떻게 되나요?
먼저, 함수형 인터페이스는 단 하나의 추상 메소드만을 가지고 있는 인터페이스입니다. 자바에는 이미 많은 함수형 인터페이스가 내장되어 있으며, 그 중에서 Predicate
인터페이스는 객체를 받아서 조건을 검사하는 메소드 test
를 정의하고 있습니다.
예를 들어, List
에 있는 객체들 중에서 특정 조건을 만족하는 객체들만 필터링하고 싶다고 가정해보겠습니다. 이때 Predicate
인터페이스를 사용하여 조건을 정의하고 stream
을 이용해서 필터링할 수 있습니다.
import java.util.List;
import java.util.Arrays;
import java.util.stream.Collectors;
public class ObjectFilteringExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "grape", "orange");
List<String> filteredFruits = fruits.stream()
.filter(fruit -> fruit.startsWith("a")) // "a"로 시작하는 과일만 필터링
.collect(Collectors.toList());
System.out.println(filteredFruits); // ["apple"]
}
}
위의 예제에서 filter
메소드 안에 람다식 fruit -> fruit.startsWith("a")
을 작성하여 “a”로 시작하는 과일만 필터링하고 있습니다. 필터링된 결과는 collect
메소드를 이용하여 새로운 리스트로 변환됩니다.
이처럼 함수형 인터페이스와 stream
을 함께 사용하여 객체 필터링을 간단하게 구현할 수 있습니다. Predicate
외에도 다른 함수형 인터페이스들도 있다는 점을 알아두시면 더욱 다양한 필터링 조건을 정의할 수 있습니다.
자세한 내용은 Oracle 공식 문서를 참고하세요.