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 구문을 사용하여 해당 구문을 출력하면 역시나 같은 결과를 얻을 수 있다.