상세 컨텐츠

본문 제목

[Stream] map() flatMap()

기록 - 프로그래밍/Java

by wjjun 2020. 7. 20. 08:30

본문

map(), flatMap()

매핑 작업은 스트림의 요소를 변환하고 변환된 요소가 포함된 새 스트림을 반환합니다.

 

map()

람다 표현식을 유일한 인수로 사용합니다.

모든 개별 요소(elements)를 변경하기 위해 사용합니다.

반환(return) 값은 변경된 요소를 포함하고 있는 새로운 스트림 객체입니다.

<R> Stream<R> map(Function<? super T, ? extends R> mapper)
  • Input Parameter : 각 elements 에 적용할 함수입니다.

사용예시

        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        list.stream()
            .map(num -> num * 10)
            .forEach(System.out::println)

---출력결과---
10
20
30
  • 모든 elements에 * 10을 하는 함수를 사용하고 있습니다.
  • Return Type : 주어진 함수를 스트림 모든 요소(elements)에 적용한 결과로 만들어진 새로운 스트림을 반환합니다.

 

flatMap()

컬렉션 스트림의 모든 Elements를 mapping 함수에 적용하여 모든 컬렉션이 결합된 스트림으로 반환합니다.

Stream<String[]> -> flatMap -> Stream<String>
Stream<Set<String>> -> flatmap -> Stream<String>
Stream<List<String>> -> flatmap -> Stream<String>

사용예시

    List<List<String>> collectionList = new ArrayList<>();
    collectionList.add(Arrays.asList("a", "aa", "aaa"));
    collectionList.add(Arrays.asList("b", "bb", "bbb"));
    collectionList.add(Arrays.asList("c", "cc", "ccc"));

    collectionList.stream()
        .flatMap(s -> s.stream())
        .filter(aa -> "cc".equals(aa))
        .forEach(System.out::println);

---출력결과---
cc

 

flatMap()은 왜 사용해야 하나요?

filter(), distinct() 와 같은 '중간 메소드'는 컬렉션 스트림에서 작동하지 않습니다.

  • 위와 같이 중간 메소드는 기본 타입 또는 객체 스트림에서 동작합니다.

중간 메소드 사용을 위해서는 중간 메소드 사용 이전에 스트림 평탄화(flattern)가 필요합니다.
flatMap()은 평탄화 기능을 제공하고 있습니다.

'기록 - 프로그래밍 > Java' 카테고리의 다른 글

[Stream] Match method  (0) 2020.07.28
[Stream] slice method  (0) 2020.07.27
[Stream] Optional 클래스  (0) 2020.07.23
[Stream] Method references  (0) 2020.07.22
Generic 장점과 특징  (0) 2020.06.28

관련글 더보기

댓글 영역