Přejít na hlavní obsah

Jak se liší metody map a flatmap v jazyce Java?

V programovacím jazyce Java máme dvě metody-map () a flatMap (), které se používají k převodu prvků sbírky nebo datového toku. Obě metody mají podobné funkce, ale existuje mezi nimi určitý rozdíl, který je důležité pochopit.

Metoda map() přijímá funkci a aplikuje ji na každý prvek ve sbírce nebo datovém toku. Tato funkce může být použita ke změně typu, převodu hodnot nebo provádění jakýchkoli dalších operací nad položkami. Výsledkem práce metody map () je nová sbírka nebo datový tok s upravenými prvky.

Metoda flatMap() má podobnou funkčnost, ale s určitými rozdíly. flatMap () také přijímá funkci, která se vztahuje na každou položku ve sbírce nebo datovém toku. Na rozdíl od map () však funkce přenesená do flatMap () vrací Stream nebo sbírku prvků. flatMap () pak kombinuje prvky ze všech vláken nebo kolekcí do jednoho sdíleného streamu nebo sbírky.

Stručně řečeno, rozdíl mezi map() a flatMap() je v tom, že map() zachovává datovou strukturu a vrací novou sbírku nebo datový tok s upravenými prvky, zatímco flatMap() provádí plochý (flat) převodník spojením prvků z různých zdrojů do jednoho sdíleného proudu nebo sbírky.

Definice map a flatMap v Javě

Metoda map přijímá funkci konverze a aplikuje ji na každý prvek vstupní sbírky a vytváří novou sbírku s výsledky konverze. Pomocí metody map můžete například zdvojnásobit každé číslo v seznamu nebo převést řetězec na horní registr.

Syntaxe metody map je následující:

Stream.map(Function mapper)

Metoda flatMap, na rozdíl od metody map, přijímá funkci konverze, která by měla vrátit stream. FlatMap pak" rozbalí " každý vrácený stream a spojí je do jednoho společného streamu. To vám umožní získat seznam objektů, nikoli seznam streamů.

Syntaxe metody flatMap je následující:

Stream.flatMap(Function mapper)

Hlavním rozdílem mezi map a flatMap je tedy možnost použití flatMap, kdy by funkce konverze měla vrátit stream, nikoli jednoduchou hodnotu. Díky tomu je flatMap velmi výkonným nástrojem pro práci se sbírkami a streamy v Javě.

Jak funguje map v Javě

Funkce přenášená do metody map přijme jednu položku a vrátí novou hodnotu, která bude použita v novém toku. Při aplikaci této funkce na všechny prvky toku vytvoří map nový tok s převedenými hodnotami. Výsledkem je tok obsahující transformované prvky.

Příklad použití metody map:

List numbers = Arrays.asList(1, 2, 3, 4, 5);List squaredNumbers = numbers.stream().map(num -> num * num).collect(Collectors.toList());System.out.println(squaredNumbers);

Použití metody map tedy umožňuje převést každý prvek toku na novou hodnotu, což může být užitečné pro různé operace zpracování dat.

Jak funguje flatMap v Javě

Metoda flatMap funguje ve dvou krocích:

  1. Aplikace funkce na prvky: Nejprve flatMap aplikuje danou funkci na každý prvek původního toku. Funkce by měla vrátit tok z nuly nebo více prvků. Každý prvek původního toku je tedy převeden na tok hodnot.
  2. Slučování hodnotových toků: FlatMap pak sloučí všechny toky hodnot do jedné sekvence prvků. Shromažďuje všechny hodnoty z každého toku a vrací jeden celkový tok hodnot.

Příklad použití flatMap:

List words = Arrays.asList ("Ahoj", "mír"); List letters = words.stream() .flatMap(word -> Arrays.stream(word.split(""))) .collect(Collectors.toList());

V tomto příkladu, flatMap aplikuje na záplavu slov "Ahoj"a " svět". Funkce pak rozdělí každé slovo na jednotlivá písmena pomocí metody split(). V důsledku toho získáme tok z písmen "P", "R", "A", "B", "E", "T", "M", "A", "R". A konečně, pomocí metody collect () se všechna písmena shromažďují v seznamu letters.

Příklad použití map v Javě

Map v Javě je metoda, která aplikuje funkci na každý prvek ve streamu a vrací nový stream s převedenými prvky.

Řekněme, že máme seznam čísel:

List numbers = Arrays.asList(1, 2, 3, 4, 5);

Chceme zvýšit každou položku seznamu o 1. K tomu můžeme použít metodu map:

List incrementedNumbers = numbers.stream() .map(num -> num + 1) .collect(Collectors.toList());

Výsledkem je, že proměnná incrementedNumbers bude obsahovat seznam [2, 3, 4, 5, 6], kde je každá položka původního seznamu zvýšena o 1.

Příklad použití flatMap v Javě

Zvažte příklad, abyste lépe pochopili, jak metoda funguje flatMap. Řekněme, že máme seznam čísel:

List> numbers = Arrays.asList(Arrays.asList(1, 2, 3),Arrays.asList(4, 5, 6),Arrays.asList(7, 8, 9));

Chceme získat jeden tok obsahující všechna čísla z těchto seznamů. Metodu flatMap lze použít následovně:

List flattenedNumbers = numbers.stream().flatMap(Collection::stream).collect(Collectors.toList());

V důsledku fungování tohoto kódu bude v proměnné flattenedNumbers umístěn seznam [123456789]. Seznam seznam seznamů jsme převedli na jeden plochý seznam čísel.

Uplatnění flatMap zvláště užitečné při práci s vnořenými sbírkami nebo v případě potřeby převést prvky toku na jiné objekty. Metoda flatMap umožňuje filtrování, konverzi a shromažďování dat pomocí plné síly funkčního programování v Javě.

Rozdíl mezi map a flatMap v Javě

Operátoři map a flatMap v Javě používají se k přeměně prvků sbírky nebo datového toku, ale mají určité rozdíly ve své funkčnosti.

Operátor map přijímá prvek sbírky a aplikuje na něj funkci a vrací převedený prvek. Výsledkem práce operátora map je nový datový tok, kde je každý prvek výsledkem aplikace funkce na příslušnou položku zdrojového toku.

Operátor flatMap na rozdíl od map, přijímá prvek sbírky a vrací nový datový tok. Funkce přenesená do flatMap se také vztahuje na prvek sbírky, ale výsledkem může být ne jeden prvek, ale nový datový tok s více prvky.

Použití flatMap zabraňuje přijímání vnořených datových toků (např. toků uvnitř toků) v případech, kdy aplikace map může vést k podobnému výsledku.

Hlavní rozdíl mezi map a flatMap jedná se o typ vrácené hodnoty: map vrací jeden prvek a flatMap - nový datový tok.

V jakých případech používat map a flatMap

Metoda map:

Metoda map aplikuje se na každý prvek sekvence a převádí jej podle uvedené funkce. Výsledek práce metody map bude existovat nová sekvence obsahující transformované prvky. Tuto metodu je vhodné použít, když je nutné převést každý prvek z jednoho typu na jiný, nebo změnit hodnotu nějakého pole v objektu.

Metoda flatMap:

Metoda flatMap podobná metoda map na rozdíl od něj ale umí pracovat se sekvencemi, které se vracejí z funkce-převodníku. Aplikovat flatMap ke každému prvku původní sekvence, nedostáváme transformované prvky, ale novou samostatnou sekvenci prvků. Pak se všechny tyto sekvence spojí do jedné společné sekvence.

Metoda flatMap užitečné v případech, kdy funkce převodníků vrátí více prvků nebo sekvencí a je třeba sloučit výsledky jejich práce do jedné společné sekvence.

Nakonec použití metody map je oprávněné, když je nutné převést každý prvek jednotlivě. A metoda flatMap bude užitečné, když je třeba převést a sloučit prvky z různých sekvencí.