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
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
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('Colombia', 'Finland', 'Greece', 'Iceland', 'Liberia', 'Mali', 'Mauritius'), Arrays.asList('Peru', 'Serbia', 'Singapore', 'Turkey', 'Uzbekistan', 'Yemen', 'Zimbabwe', 'Greece', 'Iceland')).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('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>
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().
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 Stream | 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. |