자바 스트림(Stream) API를 활용한 데이터 필터링과 변환 예제

자바 스트림(Stream) API란?

자바 8부터 추가된 스트림(Stream) API는 데이터 처리를 위한 함수형 프로그래밍을 지원합니다. 스트림은 다양한 데이터 소스에서 처리할 수 있으며, 컬렉션, 배열, I/O 등 다양한 데이터 소스에서 데이터를 가져와 처리하며, 중간 연산과 최종 연산으로 구성됩니다.

중간 연산은 스트림을 반환하며, 최종 연산은 스트림에서 최종 결과를 반환합니다. 이러한 스트림 API를 이용하면 더 간결하고 가독성이 높은 코드를 작성할 수 있습니다. 또한, 스트림 API를 이용하면 코드의 병렬 처리도 가능하므로, 성능을 향상시킬 수 있습니다.

데이터 필터링을 위한 Stream API 활용

데이터 필터링은 스트림 API에서 가장 기본적인 기능 중 하나입니다. 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있습니다. 이를 위해 filter() 메소드를 사용합니다.

filter() 메소드는 Predicate를 매개변수로 받습니다. Predicate는 boolean 값을 반환하는 함수형 인터페이스입니다. Predicate를 이용하여 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있습니다.

List names = Arrays.asList("John", "Jane", "Mike", "Sarah", "Tom");

List filteredNames = names.stream()
        .filter(name -> name.startsWith("J"))
        .collect(Collectors.toList());

System.out.println(filteredNames); // [John, Jane]

위 예제는 List 객체에서 이름이 "J"로 시작하는 데이터만 추출하는 예제입니다. filter() 메소드를 이용하여 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있습니다.

데이터 변환을 위한 Stream API 활용

데이터 변환은 스트림 API에서 가장 많이 사용되는 기능 중 하나입니다. 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다. 이를 위해 map() 메소드를 사용합니다.

map() 메소드는 Function을 매개변수로 받습니다. Function은 입력값을 받아서 출력값을 반환하는 함수형 인터페이스입니다. map() 메소드를 이용하여 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다.

List names = Arrays.asList("John", "Jane", "Mike", "Sarah", "Tom");

List upperCaseNames = names.stream()
        .map(String::toUpperCase)
        .collect(Collectors.toList());

System.out.println(upperCaseNames); // [JOHN, JANE, MIKE, SARAH, TOM]

위 예제는 List 객체에서 이름을 대문자로 변환하는 예제입니다. map() 메소드를 이용하여 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다.

예제: 자바 스트림(Stream) API를 활용한 데이터 필터링과 변환

다음은 자바 스트림(Stream) API를 활용한 데이터 필터링과 변환 예제입니다. 예제에서는 사용자(User) 클래스를 정의하고, 이를 이용하여 데이터 필터링과 변환을 수행합니다.

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

public class StreamExample {

    public static void main(String[] args) {
        List users = Arrays.asList(
                new User("John", 30),
                new User("Jane", 25),
                new User("Mike", 35),
                new User("Sarah", 28),
                new User("Tom", 40)
        );

        // 나이가 30 이상인 사용자 필터링
        List filteredUsers = users.stream()
                .filter(user -> user.getAge() >= 30)
                .collect(Collectors.toList());

        System.out.println(filteredUsers);

        // 이름을 대문자로 변환한 사용자 목록
        List upperCaseNames = users.stream()
                .map(user -> user.getName().toUpperCase())
                .collect(Collectors.toList());

        System.out.println(upperCaseNames);
    }

    static class User {
        private String name;
        private int age;

        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + ''' +
                    ", age=" + age +
                    '}';
        }
    }

}

위 예제에서는 User 클래스를 정의하고, 이를 이용하여 데이터 필터링과 변환을 수행합니다. User 클래스는 이름(name)과 나이(age)를 가지고 있습니다.

첫 번째 예제에서는 나이가 30 이상인 사용자만 추출하는 예제입니다. filter() 메소드를 이용하여 나이가 30 이상인 사용자만 추출합니다.

두 번째 예제에서는 사용자의 이름을 대문자로 변환하는 예제입니다. map() 메소드를 이용하여 사용자의 이름을 대문자로 변환합니다.

결론

자바 스트림(Stream) API는 데이터 처리를 위한 함수형 프로그래밍을 지원합니다. 스트림 API를 이용하면 더 간결하고 가독성이 높은 코드를 작성할 수 있습니다. 또한, 스트림 API를 이용하면 코드의 병렬 처리도 가능하므로, 성능을 향상시킬 수 있습니다.

스트림 API에서 데이터 필터링과 변환은 가장 기본적인 기능 중 하나입니다. filter() 메소드를 이용하여 스트림에서 특정 조건에 맞는 데이터만 추출할 수 있으며, map() 메소드를 이용하여 스트림에서 처리된 데이터를 다른 형식으로 변환할 수 있습니다.

위 예제를 참고하여 자바 스트림(Stream) API를 활용하여 데이터 처리를 보다 편리하고 간결하게 수행할 수 있습니다.