[java] 스트림 API를 이용한 데이터 필터링 방법

자바의 스트림 API를 사용하면 데이터를 효과적으로 필터링 할 수 있습니다. 스트림 API는 데이터 처리를 위한 강력한 기능을 제공하며, 데이터를 조작하고 변환하는 작업을 더욱 간편하게 처리할 수 있습니다.

필터링을 위한 Predicate 인터페이스

스트림 API에서 데이터를 필터링하기 위해서는 Predicate 인터페이스를 사용합니다. Predicate는 입력값을 받아서 참 또는 거짓을 반환하는 함수형 인터페이스입니다. 따라서 데이터를 검사하고 필터링하기 위한 조건을 Predicate 객체로 표현할 수 있습니다.

import java.util.List;
import java.util.stream.Collectors;

public class DataFilteringExample {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        List<Integer> evenNumbers = numbers.stream()
                .filter(number -> number % 2 == 0)
                .collect(Collectors.toList());

        System.out.println(evenNumbers); // 출력: [2, 4, 6, 8, 10]
    }
}

위의 예시 코드에서는 리스트에 있는 숫자들 중에서 짝수만을 필터링한 결과를 출력하고 있습니다. filter 메소드는 Predicate를 인자로 받아서 해당 조건을 만족하는 원소만을 반환합니다. 따라서 number % 2 == 0 조건을 만족하는 짝수만을 필터링한 결과가 최종적으로 evenNumbers 리스트에 저장됩니다.

복잡한 필터링 조건 지정하기

Predicate 인터페이스를 사용하면 복잡한 필터링 조건도 표현할 수 있습니다. 예를 들어, 숫자 리스트에서 5보다 큰 홀수를 필터링한다고 가정해봅시다.

import java.util.List;
import java.util.stream.Collectors;

public class DataFilteringExample {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        List<Integer> filteredNumbers = numbers.stream()
                .filter(number -> number > 5 && number % 2 != 0)
                .collect(Collectors.toList());

        System.out.println(filteredNumbers); // 출력: [7, 9]
    }
}

위의 예시 코드에서는 number > 5 && number % 2 != 0 조건을 만족하는 숫자들만을 필터링하고 있습니다. 이처럼 여러 개의 조건을 결합하여 복잡한 필터링 조건을 지정할 수 있습니다.

요약

스트림 API를 이용하면 데이터를 효과적으로 필터링할 수 있으며, Predicate 인터페이스를 사용하여 필터링 조건을 지정할 수 있습니다. 복잡한 필터링 조건도 간단하게 표현할 수 있어서 더욱 편리합니다. 스트림 API를 잘 이용하면 데이터 처리 과정을 더욱 간결하고 효율적으로 구현할 수 있습니다.

참고자료