.map()과 .flatMap()의 차이
2020. 4. 10. 22:45ㆍJava/일반
728x90
1. .map()
.map()은 단일 스트림의 원소를 매핑시킨 후 매핑시킨 값을 다시 스트림으로 변환하는 중간 연산을 담당합니다. 객체에서 원하는 원소를 추출해는 역할을 한다고 말할 수 있습니다. 아래의 예시를 살펴보겠습니다.
Person.java
class Person {
int age;
String name;
...
}
MapTest.java
List<Person> sample = Arrays.asList(
new Person(20, "park");
new Person(35, "kyung");
new Person(67, "seok");
new Person(10, "test man");
new Person(45, "test woman");
);
//List -> Stream<Person> -> map -> Stream<String>
Stream<String> mapStream = sample.stream().map(person -> person.getName());
mapStream.forEach(System.out::println);
output
park
kyung
seok
test man
test woman
2. .flatMap()
.flatMap()은 Array나 Object로 감싸져 있는 모든 원소를 단일 원소 스트림으로 반환합니다. .map()은 입력한 원소를 그대로 스트림으로 반환하지만 .flatMap()은 입력한 원소를 가장 작은 단위의 단일 스트림으로 반환합니다. 이는 아래의 그림과 같습니다.
withoutFlatMap.java
String[][] sample = new String[][]{
{"a", "b"}, {"c", "d"}, {"e", "a"}, {"a", "h"}, {"i", "j"}
};
//without .flatMap()
Stream<String> stream = sample.stream()
.filter(alpha -> "a".equals(alpha[0].toString() || "a".equals(alpha[1].toString())))
stream.forEach(alpha -> System.out.println("{"+alpha[0]+", "+alpha[1]+"}"));
output
{a, b}
{e, a}
{a, h}
FlatMapTest.java
String[][] sample = new String[][]{
{"a", "b"}, {"c", "d"}, {"e", "a"}, {"a", "h"}, {"i", "j"}
};
//without .flatMap()
Stream<String> stream = sample.stream()
.flatMap(array -> Arrays.stream(array))
.filter(x-> "a".equals(x));
stream.forEach(System.out::println);
output
a
a
a
참조: https://qkrrudtjr954.github.io/java/2017/10/15/difference-between-map-and-flatMap.html
728x90
'Java > 일반' 카테고리의 다른 글
Filter, Interceptor, AOP의 차이 (0) | 2020.04.22 |
---|---|
NDC와 MDC (0) | 2020.04.11 |
LogBack (0) | 2020.04.06 |
SLF4J (0) | 2020.04.03 |
Jar과 War의 차이 (0) | 2020.04.03 |