map과 flatMap

이용구·2025년 1월 19일



스트림의 중간 연산 중 map()flatMap()은 스트림의 요소를 변환한다.

하지만 flatMap()은 스트림의 차원을 줄여주는 차이점이 있다.


코드를 통해 알아보자




예시 코드


public class Main{

    public static void main(String[] args) {

        //스트림의 요소 하나하나가 스트림
        Stream<String []> strArrStream = Stream.of(
                new String[]{"abc", "def", "ghi"},
                new String[]{"ABC", "GHI", "KOREA"}
        );

        Stream<Stream<String>> strStrStream = strArrStream.map(Arrays::stream);
        
        strStrStream.forEach(System.out::println);
    }
}

이 코드의 목적은 문자열을 하나씩 출력하는 것이다.





하지만 출력값이 이상하다.






strArrStream스트림의 요소 하나가 String 배열이다.

여기서 map()을 이용하여 변환을 하면 스트림의 요소 하나가 스트림으로 바뀐다.



이러한 경우 flatMap()을 사용하면 된다.








flatMap() 적용 코드


public class Main {

    public static void main(String[] args) {

        //스트림의 요소 하나하나가 스트림
        Stream<String []> strArrStream = Stream.of(
                new String[]{"abc", "def", "ghi"},
                new String[]{"ABC", "GHI", "KOREA"}
        );
        
        Stream<String> strStrStream2 = strArrStream.flatMap(Arrays::stream);
        
        strStrStream2.forEach(System.out::println);
    }
}

기대하던 출력값이 나온다.




map()은 스트림의 요소 하나가 스트림이었지만,
flapMap()은 스트림의 차원을 줄여 요소 하나가 String이다.


여러 개의 문자열 배열을 하나의 문자열 배열로 변환하는 경우 사용하면 좋을 것이다.








출처: 자바의 정석

profile
베짱이는 개미가 밉다

0개의 댓글