SeouliteLab

[Java/자바] Stream의 flatMap() 메서드 사용 방법 본문

프로그래밍

[Java/자바] Stream의 flatMap() 메서드 사용 방법

Seoulite Lab 2024. 3. 9. 00:55

Stream의 flatMap() 메서드란?

Java의 스트림(Stream) API는 데이터를 처리하기 위한 편리한 방법을 제공합니다. Stream의 flatMap() 메서드는 중첩된 구조의 데이터를 펼쳐서 단일 레벨의 스트림으로 만들어주는 데 사용됩니다. 이를 통해 중첩된 데이터를 평탄화하여 처리할 수 있습니다.

Stream의 flatMap() 메서드 사용 방법

Stream의 flatMap() 메서드는 다음과 같은 형식을 갖습니다:

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
  • mapper: 각 요소를 새로운 스트림으로 매핑하는 함수를 지정하는 Function입니다.

Stream의 flatMap() 메서드 예제

다음은 Stream의 flatMap() 메서드를 사용하여 중첩된 리스트를 평탄화하는 예제 코드입니다.


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

public class StreamFlatMapExample {
    public static void main(String[] args) {
        List> nestedNumbers = Arrays.asList(
                Arrays.asList(1, 2, 3),
                Arrays.asList(4, 5, 6),
                Arrays.asList(7, 8, 9)
        );

        // 중첩된 리스트를 평탄화하여 단일 레벨의 스트림으로 변환
        List flattenedNumbers = nestedNumbers.stream()
                .flatMap(List::stream)
                .collect(Collectors.toList());
        System.out.println("Flattened numbers: " + flattenedNumbers);
    }
}

추가 예제:

아래는 Stream의 flatMap() 메서드를 사용하는 다양한 예제 코드입니다.


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

public class MoreStreamFlatMapExamples {
    public static void main(String[] args) {
        // 예제 1: 문자열 리스트의 각 요소를 문자 단위로 분리하여 새로운 리스트 생성
        List words = Arrays.asList("java", "stream", "flatMap");
        List letters = words.stream()
                .flatMap(word -> Arrays.stream(word.split("")))
                .collect(Collectors.toList());
        System.out.println("Letters: " + letters);

        // 예제 2: 중첩된 리스트의 각 요소의 제곱 값을 담은 리스트 생성
        List> nestedNumbers = Arrays.asList(
                Arrays.asList(1, 2),
                Arrays.asList(3, 4),
                Arrays.asList(5, 6)
        );
        List squares = nestedNumbers.stream()
                .flatMap(innerList -> innerList.stream().map(n -> n * n))
                .collect(Collectors.toList());
        System.out.println("Squares: " + squares);
    }
}