logo

Java 8의 flatMap() 메소드

그만큼 개울 API가 도입되었습니다. 자바 8 개체 컬렉션을 처리하는 데 사용됩니다. Import하여 사용할 수 있습니다. java.util.stream 패키지. 이 섹션에서는 스트림.플랫맵() Stream API의 메서드입니다. 또한, 우리는 다음 사항에 대해 논의할 것입니다. Java 8의 Stream.FlatMap() 및 Stream.map() 메서드 간의 주요 차이점

Intellij 아이디어와 Eclipse
Java 8의 flatMap() 메소드

주제로 넘어가기 전에 먼저, 스트림.맵() 방법. 왜냐하면 플랫맵() 방법은 지도() 방법.

Java Stream.map() 메서드

그만큼 스트림.맵() 메소드는 매퍼 함수를 ​​사용하여 중간 작업을 수행합니다. 각 요소에 대해 새로운 스트림을 생성합니다. 결과를 제공하기 위해 모든 스트림을 단일 스트림으로 변환합니다. 따라서 스트림의 각 요소는 새 스트림으로 변환됩니다.

통사론:

 Stream map(Function mapper) 

아르 자형: 새 스트림의 요소 유형을 나타내는 유형 매개변수입니다.

매퍼: 각 요소에 적용되는 비간섭, 무상태 함수인 매개변수입니다.

map() 메소드의 예

 List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList()); 

지도에 대한 위의 진술을 고려하십시오. 개울 . map()을 사용하여 결과 스트림을 생성합니다. 각 반복에서 map()은 매퍼 함수를 ​​실행하여 결과가 포함된 별도의 스트림을 생성합니다. 마지막으로 map()은 모든 스트림을 단일 스트림으로 변환합니다.

MapExample.java

 import java.util.*; public class MapExample { public static void main(String args[]) { System.out.println('Stream After applying the map() function: '); //creats a list of integers List list = Arrays.asList(12, 45, 67, 19, 87, 2, 9); //creating a new stream of the elements an prints the same using the foreach loop list.stream().map(number -> number * 2).forEach(System.out::println); } } 

산출:

 Stream After applying the map() function: 24 90 134 38 174 4 18 

Java Stream.FlatMap() 메서드

~ 안에 자바 8 Streams에서 flatMap() 메서드는 연산을 매퍼 함수로 적용하고 요소 값의 스트림을 제공합니다. 이는 각 요소의 각 반복에서 map() 메서드가 별도의 새 스트림을 생성한다는 것을 의미합니다. 평면화 메커니즘을 사용하여 모든 스트림을 단일 결과 스트림으로 병합합니다. 즉, 스트림의 스트림을 값 목록으로 변환하는 데 사용됩니다.

통사론:

 Stream flatMap(Function<? super T,? extends Stream> mapper) 

이 메서드는 함수를 인수로 사용합니다. T를 매개변수로 받아들이고 R의 스트림을 반환합니다.

아르 자형: 새 스트림의 요소 유형을 나타내는 유형 매개변수입니다.

매퍼: 각 요소에 적용하기 위한 비간섭, 무상태 함수인 매개변수입니다. 새로운 가치의 흐름을 만들어냅니다.

간단히 말해서 flatMap() 메서드가 변환에 도움이 된다고 말할 수 있습니다. 개울 에게 개울 . 수행합니다 평탄화 (평평하게 또는 평평하게) 및 매핑 (지도) 동시에. Stream.FlatMap() 메서드는 작업, 즉 평면과 지도를 모두 결합합니다.

 flatMap() = Flattening (flat)+ mapping (map) 

평탄화의 의미를 이해해 봅시다.

평탄화란 무엇입니까?

평탄화 여러 목록의 목록을 변환하고 모든 목록을 병합하여 모든 목록의 모든 요소를 ​​포함하는 단일 목록을 만드는 프로세스입니다.

정렬 배열 자바

평탄화 예

다음 목록 목록을 고려하십시오.

편평화 전: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]

편평화 후: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]

flatMap() 메서드의 예

 List country = Stream.of(Arrays.asList(&apos;Colombia&apos;, &apos;Finland&apos;, &apos;Greece&apos;, &apos;Iceland&apos;, &apos;Liberia&apos;, &apos;Mali&apos;, &apos;Mauritius&apos;), Arrays.asList(&apos;Peru&apos;, &apos;Serbia&apos;, &apos;Singapore&apos;, &apos;Turkey&apos;, &apos;Uzbekistan&apos;, &apos;Yemen&apos;, &apos;Zimbabwe&apos;, &apos;Greece&apos;, &apos;Iceland&apos;)).flatMap(List::stream) .collect(Collectors.toList()); 

매퍼 함수 List::stream을 사용하여 스트림에서 flatMap() 메서드를 사용할 수 있습니다. 스트림 터미널 작업을 실행할 때 flatMap()의 각 요소는 별도의 스트림을 제공합니다. 마지막 단계에서 flatMap() 메서드는 모든 스트림을 새 스트림으로 변환합니다. 위의 스트림에서는 중복된 값이 포함되어 있지 않은 것을 확인했습니다.

Java 프로그램을 작성하고 flatMap() 메소드를 사용해 보겠습니다.

FlatMapExample.java

char를 문자열로 변환 java
 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class FlatmapExample { public static void main(String args[]) { //creating ArrayList List productlist1 = Arrays.asList(&apos;Printer&apos;, &apos;Mouse&apos;, &apos;Keyboard&apos;, &apos;Motherboard&apos;); List productlist2 = Arrays.asList(&apos;Scanner&apos;, &apos;Projector&apos;, &apos;Light Pen&apos;); List productlist3 = Arrays.asList(&apos;Pen Drive&apos;, &apos;Charger&apos;, &apos;WIFI Adapter&apos;, &apos;Cooling Fan&apos;); List productlist4 = Arrays.asList(&apos;CPU Cabinet&apos;, &apos;WebCam&apos;, &apos;USB Light&apos;, &apos;Microphone&apos;, &apos;Power cable&apos;); List<list> allproducts = new ArrayList<list>(); //adding elements to the list allproducts.add(productlist1); allproducts.add(productlist2); allproducts.add(productlist3); allproducts.add(productlist4); //creating a list of all products List listOfAllProducts = new ArrayList(); //for each loop iterates over the list for(List pro : allproducts) { for(String product : pro) { //adds all products to the list listOfAllProducts.add(product); } } System.out.println(&apos;List Before Applying mapping and Flattening: 
&apos;); //prints stream before applying the flatMap() method System.out.println(listOfAllProducts); System.out.println(); //creats a stream of elemnts using flatMap() List flatMapList = allproducts .stream().flatMap(pList -&gt; pList.stream()).collect(Collectors.toList()); System.out.println(&apos;List After Applying Mapping and Flattening Operation: 
&apos;); //prints the new stream that we get after applying mapping and flattening System.out.println(flatMapList); } } </list></list>

산출:

 List Before Applying mapping and Flattening: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Lighten, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] List After Applying Mapping and Flattening Operation: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Light Pen, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] 

이제 우리는 Stream 클래스의 두 가지 메서드를 모두 이해했습니다. 왜냐하면 우리는 그들 사이의 주요 차이점을 쉽게 지적할 수 있기 때문입니다.

Stream.FlatMap() 대. 스트림.맵()

다음 표에서는 Stream.FlatMap()과 Stream.map() 간의 주요 차이점을 설명합니다.

Java 8의 flatMap() 메소드
스트림.플랫맵() 스트림.맵()
스트림 값의 스트림을 처리합니다. 가치의 흐름을 처리합니다.
평탄화와 함께 매핑을 수행합니다. 매핑만 수행합니다.
Stream의 데이터를 변환합니다.스트림에. 데이터를 스트림에서 스트림으로 변환합니다.
일대다 매핑을 사용합니다. 일대일 매핑을 사용합니다.
매퍼 함수는 각 입력 값에 대해 여러 값(값 스트림)을 생성합니다. 매퍼 함수는 각 입력 값에 대해 단일 값을 생성합니다.
매퍼 함수가 각 입력 값에 대해 여러 값을 생성하는 경우 flatMap() 메서드를 사용합니다. 매퍼 함수가 각 입력 값에 대해 단일 값을 생성하는 경우 map() 메서드를 사용합니다.