logo

Método flatMap() em Java 8

O Fluxo API foi introduzida em Java 8 que é usado para processar as coleções de objetos. Pode ser usado importando o java.util.stream pacote. Nesta seção, discutiremos o Stream.flatMap() método da API Stream. Além disso, discutiremos o principais diferenças entre os métodos Stream.flatMap() e Stream.map() em Java 8.

igualdade de objetos em java
Método flatMap() em Java 8

Antes de passarmos ao tópico, primeiro, vamos entender o Fluxo.map() método. Porque o mapa plano() método é baseado no mapa() método.

Método Java Stream.map()

O Fluxo.map() O método executa uma operação intermediária usando a função mapeadora. Produz um novo fluxo para cada elemento. Ele transforma todos os fluxos em um único fluxo para fornecer o resultado. portanto, cada elemento do fluxo é convertido em um novo fluxo.

Sintaxe:

 Stream map(Function mapper) 

R: É um parâmetro de tipo que representa o tipo de elemento do novo fluxo.

mapeador: É um parâmetro que é uma função sem interferência e sem estado para ser aplicado a cada elemento.

Exemplo do método map()

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

Considere a afirmação acima para um mapa do fluxo . Ele cria um fluxo resultante usando map(). Em cada iteração, map() cria um fluxo separado com o resultado executando a função mapeadora. Por fim, map() transforma todos os fluxos em um único fluxo.

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); } } 

Saída:

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

Método Java Stream.flatMap()

Em Java 8 Streams, o método flatMap() aplica a operação como uma função de mapeador e fornece um fluxo de valores de elementos. Isso significa que em cada iteração de cada elemento o método map() cria um novo fluxo separado. Ao usar o mecanismo de nivelamento, ele mescla todos os fluxos em um único fluxo resultante. Resumindo, é usado para converter um Stream de Stream em uma lista de valores.

Sintaxe:

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

O método usa uma função como argumento. Ele aceita T como parâmetro e retorna um fluxo de R.

R: É um parâmetro de tipo que representa o tipo de elemento do novo fluxo.

mapeador: É um parâmetro que é uma função sem interferência e sem estado a ser aplicada a cada elemento. Produz um fluxo de novos valores.

Resumindo, podemos dizer que o método flatMap() auxilia na conversão Fluxo para Fluxo . Ele executa achatamento (plano ou achatado) e mapeamento (mapa), simultaneamente. O método Stream.flatMap() combina ambas as operações, ou seja, flat e map.

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

Vamos entender o significado de achatamento.

O que é achatamento?

Achatamento é o processo de converter várias listas de listas e mesclar todas essas listas para criar uma única lista contendo todos os elementos de todas as listas.

modificar arquivo linux

Exemplo de achatamento

Considere as seguintes listas de listas:

Antes de achatar: [[1, 2, 3, 4], [7, 8, 9, 0], [5, 6], [12, 18, 19, 20, 17], [22]]

Após o achatamento: [1, 2, 3, 4, 7, 8, 9, 0, 5, 6, 12, 18, 19, 20, 17, 22]

Exemplo do método 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()); 

Podemos usar um método flatMap() em um stream com a função mapeadora List::stream. Ao executar a operação do terminal de stream, cada elemento de flatMap() fornece um stream separado. Na fase final, o método flatMap() transforma todos os fluxos em um novo fluxo. No fluxo acima, observamos que ele não contém valores duplicados.

Vamos criar um programa Java e usar o método flatMap().

como abrir aplicativos ocultos no Android

FlatMapExample.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>

Saída:

 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] 

Agora, entendemos os dois métodos da classe Stream. Uma vez que podemos facilmente apontar as principais diferenças entre eles.

Stream.flatMap() vs. Fluxo.map()

A tabela a seguir descreve as principais diferenças entre Stream.flatMap() e Stream.map().

Método flatMap() em Java 8
Stream.flatMap() Fluxo.map()
Ele processa o fluxo de valores do fluxo. Ele processa o fluxo de valores.
Ele executa mapeamento junto com nivelamento. Ele executa apenas mapeamento.
Ele transforma dados do Streampara transmitir. Ele transforma dados de Stream em Stream.
Ele usa mapeamento um para muitos. Ele usa mapeamento um para um.
Sua função mapeadora produz vários valores (fluxo de valores) para cada valor de entrada. Sua função mapeadora produz valores únicos para cada valor de entrada.
Use o método flatMap() quando a função mapeadora estiver produzindo vários valores para cada valor de entrada. Use o método map() quando a função mapeadora estiver produzindo valores únicos para cada valor de entrada.