[java] 스트림을 이용한 데이터 변환 방법

Java 8부터 도입된 스트림(Stream)은 데이터를 처리하는데 유용한 기능을 제공합니다. 스트림은 컬렉션, 배열 등의 데이터 소스로부터 데이터를 읽어와 변환하는 작업을 간편하게 처리할 수 있도록 도와줍니다. 이번 포스트에서는 중간 연산과 최종 연산을 이용하여 스트림을 이용한 데이터 변환 방법을 알아보겠습니다.

1. 중간 연산으로 데이터 변환하기

스트림의 중간 연산은 데이터를 변환하는 역할을 합니다. 중간 연산은 한 개 이상의 스트림을 반환하며, 연속적으로 적용하여 원하는 데이터 형태로 변환할 수 있습니다.

1.1. map()

map() 메서드는 스트림의 요소를 변환하는데 사용됩니다. 각 요소를 변환하는 함수를 매핑 함수로 전달하고, 해당 함수를 통해 변환된 결과를 반환하는 스트림을 생성합니다.

예를 들어, 다음은 스트림의 모든 요소에 2를 곱한 결과를 반환하는 예제입니다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
                              .map(n -> n * 2)
                              .collect(Collectors.toList());
System.out.println(result); // [2, 4, 6, 8, 10]

1.2. filter()

filter() 메서드는 주어진 조건에 맞는 요소만을 선택하여 새로운 스트림을 생성합니다.

예를 들어, 다음은 스트림에서 짝수만을 선택하여 새로운 스트림을 생성하는 예제입니다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
                              .filter(n -> n % 2 == 0)
                              .collect(Collectors.toList());
System.out.println(result); // [2, 4]

2. 최종 연산으로 데이터 수집하기

스트림의 최종 연산은 스트림의 요소를 수집하여 최종 결과를 반환하는 역할을 합니다. 최종 연산을 적용하면 스트림이 완전히 소모되며, 더 이상 다른 연산을 수행할 수 없습니다.

2.1. collect()

collect() 메서드는 스트림의 요소를 수집하여 컬렉션, 리스트, 맵 등의 형태로 반환합니다.

예를 들어, 다음은 스트림의 짝수를 수집하여 리스트로 반환하는 예제입니다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = numbers.stream()
                              .filter(n -> n % 2 == 0)
                              .collect(Collectors.toList());
System.out.println(result); // [2, 4]

결론

스트림을 이용하면 데이터를 간편하게 변환할 수 있습니다. 중간 연산을 이용하여 데이터를 원하는 형태로 변환하고, 최종 연산을 이용하여 변환된 데이터를 수집할 수 있습니다. 스트림을 잘 활용하면 코드의 가독성과 유지 보수성을 향상시킬 수 있으므로, 앞으로도 적극적으로 활용해보세요!