그만큼 개울 API가 도입되었습니다. 자바 8 개체 컬렉션을 처리하는 데 사용됩니다. Import하여 사용할 수 있습니다. java.util.stream 패키지. 이 섹션에서는 스트림.플랫맵() Stream API의 메서드입니다. 또한, 우리는 다음 사항에 대해 논의할 것입니다. Java 8의 Stream.FlatMap() 및 Stream.map() 메서드 간의 주요 차이점
Intellij 아이디어와 Eclipse
주제로 넘어가기 전에 먼저, 스트림.맵() 방법. 왜냐하면 플랫맵() 방법은 지도() 방법.
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() 메서드가 변환에 도움이 된다고 말할 수 있습니다. 개울
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('Colombia', 'Finland', 'Greece', 'Iceland', 'Liberia', 'Mali', 'Mauritius'), Arrays.asList('Peru', 'Serbia', 'Singapore', 'Turkey', 'Uzbekistan', 'Yemen', 'Zimbabwe', 'Greece', 'Iceland')).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('Printer', 'Mouse', 'Keyboard', 'Motherboard'); List productlist2 = Arrays.asList('Scanner', 'Projector', 'Light Pen'); List productlist3 = Arrays.asList('Pen Drive', 'Charger', 'WIFI Adapter', 'Cooling Fan'); List productlist4 = Arrays.asList('CPU Cabinet', 'WebCam', 'USB Light', 'Microphone', 'Power cable'); 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('List Before Applying mapping and Flattening: '); //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 -> pList.stream()).collect(Collectors.toList()); System.out.println('List After Applying Mapping and Flattening Operation: '); //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() 간의 주요 차이점을 설명합니다.
스트림.플랫맵() | 스트림.맵() |
---|---|
스트림 값의 스트림을 처리합니다. | 가치의 흐름을 처리합니다. |
평탄화와 함께 매핑을 수행합니다. | 매핑만 수행합니다. |
Stream의 데이터를 변환합니다. | 데이터를 스트림에서 스트림으로 변환합니다. |
일대다 매핑을 사용합니다. | 일대일 매핑을 사용합니다. |
매퍼 함수는 각 입력 값에 대해 여러 값(값 스트림)을 생성합니다. | 매퍼 함수는 각 입력 값에 대해 단일 값을 생성합니다. |
매퍼 함수가 각 입력 값에 대해 여러 값을 생성하는 경우 flatMap() 메서드를 사용합니다. | 매퍼 함수가 각 입력 값에 대해 단일 값을 생성하는 경우 map() 메서드를 사용합니다. |