logo

예제를 사용하여 Java에서 flatMap() 스트리밍

스트림 flatMap(함수 매퍼) 이 스트림의 각 요소를 제공된 매핑 함수를 각 요소에 적용하여 생성된 매핑된 스트림의 콘텐츠로 대체한 결과로 구성된 스트림을 반환합니다. Stream flatMap(함수 매퍼)는 중간 작업 . 이러한 작업은 항상 게으르다. 중간 작업은 Stream 인스턴스에서 호출되고 처리가 완료된 후 Stream 인스턴스를 출력으로 제공합니다.

메모 : 매핑된 각 스트림은 해당 콘텐츠가 이 스트림에 배치된 후 닫힙니다. 매핑된 스트림이 null이면 대신 빈 스트림이 사용됩니다.



flatMap() V/s 지도() :
1) 지도() 스트림을 가져와서 다른 스트림으로 변환합니다. Stream의 각 요소에 함수를 적용하고 반환 값을 새 Stream에 저장합니다. 스트림을 평탄화하지 않습니다. 그러나 flatMap()은 맵과 플랫 작업의 조합입니다. 즉, 요소에 함수를 적용하고 플랫화하는 것입니다.
2) 지도() 변환에만 사용되지만 flatMap()은 변환과 평면화에 모두 사용됩니다.

구문:

 < R>개울< R>flatMap(함수< ? super T, ? extends Stream< ? extends R>> 매퍼) 여기서 R은 새 스트림의 요소 유형입니다. Stream은 인터페이스이고 T는 스트림 요소의 유형입니다. 매퍼는 각 요소에 적용되는 무상태 함수이며 이 함수는 새 스트림을 반환합니다.>

예시 1 : 제공된 매핑 기능이 포함된 flatMap() 함수입니다.








// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > >// Driver code> >public> static> void> main(String[] args)> >{> > >// Creating a List of Strings> >List list = Arrays.asList(>'5.6'>,>'7.4'>,>'4'>,> >'1'>,>'2.3'>);> > >// Using Stream flatMap(Function mapper)> >list.stream().flatMap(num ->Stream.of(num)).> >forEach(System.out::println);> >}> }>

>

>

출력 :

 5.6 7.4 4 1 2.3>

예시 2: 문자열을 위치 2의 문자와 매핑하는 작업을 제공하는 flatMap() 함수입니다.

C에서 배열을 사용하는 구조




// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > >// Driver code> >public> static> void> main(String[] args)> >{> > >// Creating a List of Strings> >List list = Arrays.asList(>'Geeks'>,>'GFG'>,> >'techcodeview.com'>,>'gfg'>);> > >// Using Stream flatMap(Function mapper)> >list.stream().flatMap(str ->> >Stream.of(str.charAt(>2>))).> >forEach(System.out::println);> >}> }>

>

아파치
>

출력 :

 e G e g>

flatMap()은 어떻게 작동하나요?

게시물에서 이미 논의한 바와 같이 flatMap()은 맵과 플랫 작업의 조합입니다. 즉, 먼저 맵 기능을 적용한 다음 결과를 플랫화합니다. 스트림을 평탄화하는 것이 정확히 무엇인지 이해하기 위해 몇 가지 예를 고려해 보겠습니다.
예시 1 :
병합 전 목록:

 [ [2, 3, 5], [7, 11, 13], [17, 19, 23] ]>

목록에는 2개의 레벨이 있으며 3개의 작은 목록으로 구성됩니다. Flattening 후에는 다음과 같이 단일 레벨 구조로 변환됩니다.

 [ 2, 3, 5, 7, 11, 13, 17, 19, 23 ]>

예시 2:
병합 전 목록:

 [ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ]>

목록은 3개 수준으로 구성되며 4개의 작은 목록으로 구성됩니다. Flattening 후에는 다음과 같이 단일 레벨 구조로 변환됩니다.

 ['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S']>

간단히 말해서 다음과 같은 경우가 있다고 말할 수 있습니다. << 목록 스트림 데이터 형식 >> 평탄화하기 전, flatMap() 적용 시, <<의 스트림 데이터 형식 >> 평탄화 후 반환됩니다.
애플리케이션 :




// Java code for Stream flatMap(Function mapper)> import> java.util.*;> import> java.util.stream.Collectors;> > class> GFG> {> >// Driver code> >public> static> void> main(String[] args)> >{> >// Creating a list of Prime Numbers> >List PrimeNumbers = Arrays.asList(>5>,>7>,>11>,>13>);> > >// Creating a list of Odd Numbers> >List OddNumbers = Arrays.asList(>1>,>3>,>5>);> > >// Creating a list of Even Numbers> >List EvenNumbers = Arrays.asList(>2>,>4>,>6>,>8>);> > >List listOfListofInts => >Arrays.asList(PrimeNumbers, OddNumbers, EvenNumbers);> > >System.out.println(>'The Structure before flattening is : '> +> >listOfListofInts);> > >// Using flatMap for transformating and flattening.> >List listofInts = listOfListofInts.stream()> >.flatMap(list ->목록.스트림())>> >.collect(Collectors.toList());> > >System.out.println(>'The Structure after flattening is : '> +> >listofInts);> >}> }>

>

>

출력 :

 The Structure before flattening is : [[5, 7, 11, 13], [1, 3, 5], [2, 4, 6, 8]] The Structure after flattening is : [5, 7, 11, 13, 1, 3, 5, 2, 4, 6, 8]>