[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 공식 문서를 참고하세요.