[Java] 자바 Stream flatMapXXXX( ) 메소드를 알아보자.

2021-02-24


자바의 flatMapXXXX( )  메서드는 기존의 스트림의 데이터를 다수의 데이터로 구성된 새로운 스트림으로 리턴하는 역할을 한다.  여기서의 플랫은 다양한 타입의 매개변수를 받을 수 있으며, 또한 flatMapToInt / flatMapToDouble 등과 같이 제네릭 타입을 특정 타입으로 매핑해주는 것 도 가능하다. 아래의 예제를 보자.


- 예제

 

package sStream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class main {

	public static void main(String[] args) {


		List<String> list = new ArrayList<String>();

		list.add("123 888");
		list.add("444 555");
		list.add("777 2323");
		list.add("1399 22");
	}
}


위와 같이 리스트 객체를 만들어주고 공백이 포함된 문자열을 선언해 주었다.


- flatMap

 

package sStream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class main {

	public static void main(String[] args) {


		List<String> list = new ArrayList<String>();

		list.add("123 888");
		list.add("444 555");
		list.add("777 2323");
		list.add("1399 22");
        
		list.stream()
		.flatMap(str -> Arrays.stream(str.split(" ")))
		//공백이 포함된 스트링 객체를 배열의 스트림으로 하나씩 쪼개서 넣는다.
		.forEach(sp -> System.out.println(sp));        
	}
}

 

여기서의 flatMap은 기존의 리스트에 있는 공백의 포함된 문자열을 해당 공백 기준으로 나누어 각각의 단어별 스트림을 만들어 리턴한다. 이를 forEach구문으로 출력하면 아래와 같은 결과가 나오게 된다. 


- flatMapToInt

 

package sStream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class main {

	public static void main(String[] args) {


		List<String> list = new ArrayList<String>();

		list.add("123 888");
		list.add("444 555");
		list.add("777 2323");
		list.add("1399 22");

		list.stream()
		.flatMapToInt(str -> {
			String [] sArr = str.split(" ");
			int [] arr = new int[sArr.length];
			
			for(int i = 0; i < sArr.length; i++) {
				arr[i] = Integer.parseInt(sArr[i]);
			}
			return Arrays.stream(arr);
		})
		.forEach(num -> System.out.println(num));
	}
}

 

또한 기존의 String 형태의 배열을 인트형 배열로 변환시키기 위해 인트형으로 매핑하는 flatMapToInt 메소드를 사용하여, 인트형 배열 스트림을 리턴할 수 있다. forEach 구문을 사용하여 해당 구문을 출력하면 역시나 같은 결과를 얻을 수 있다.