티스토리 뷰

Java+Spring/Java

[Java]스트림 map() vs. flatMap()

Vagabund.Gni 2022. 10. 1. 17:12
728x90
반응형

map()

 

map()은 스트림에 접근해서 사용자가 원하는 매핑을 실행해주는 메서드이다.

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

public class Example {
    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(2, 3, 5, 7);

        List<Integer> result = list.stream()
                .map(a -> a * 2) // 모든 요소에 곱하기 2
                .collect(Collectors.toList());

        System.out.println(result);
    }
}
[4, 6, 10, 14]

지정된 리스트의 각 요소에 곱하기 2를 하는 연산을 진행하는 것을 확인할 수 있다.

 

그런데 다음과 같은 연산을 진행하려고 하면 생각처럼 되지 않는다.

 

["Gni", "Dinger"] 리스트의 알파벳을 분리해서 하나의 리스트로 만들기

 

원하는 결과: ["G", "n", "i", "D", "i", "n", "g", "e", "r"]

 

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

public class Example {
    public static void main(String[] args) {

        List<String> list = Arrays.asList("Gni", "Dinger");

        List<String[]> result1 = list.stream()
            .map(a -> a.split(""))
            .collect(Collectors.toList());

        System.out.println(Arrays.toString(result1.get(0)) +", "+ Arrays.toString(result1.get(1)));

    }
}
[G, n, i], [D, i, n, g, e, r]

각각 알파벳은 분리되었지만 리턴 타입이 List<String[]>으로, 2차원 리스트를 생성하는 것을 확인할 수 있다.

 

이때 사용하는 것이 바로 flatMap()이다.

 

flatMap()

 

단도직입적으로 말하면, flatMap()다중 스트림을 평탄화하는 역할을 한다.

 

즉, 다중 스트림을 하나의 스트림으로 합친다는 뜻이다.

 

위의 예에 바로 적용해보자.

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

public class Example {
    public static void main(String[] args) {

        List<String> list = Arrays.asList("Gni", "Dinger");

        List<String> result2 = list.stream()
                .flatMap(a -> Arrays.stream(a.split("")))
                .collect(Collectors.toList());

        System.out.println(result2);

    }
}
[G, n, i, D, i, n, g, e, r]

원하는 결과를 출력하는 것을 확인할 수 있다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함