Java Streams pro začátečníky: Úvod do používání streamů v Javě

Java Streams pro začátečníky: Úvod do používání streamů v Javě

Streamy Java 8 umožňují vývojářům extrahovat přesná data z velké kolekce pomocí sady předdefinovaných operací.





Před vydáním Javy 8 by bylo použití výrazu „stream“ v Javě automaticky spojeno s I/O. Java 8 však zavedla stream, který lze označit jako sadu výpočetních kroků spojených dohromady v tom, co se běžně označuje jako „stream pipeline“.





Tento článek vám představí streamy Java 8 a předvede, jak mohou být užitečné ve vašich projektech.





Co je stream?

Stream je rozhraní Java, které přebírá zdroj, provádí sadu operací k extrahování konkrétních dat a poté tato data poskytuje aplikaci k použití. V zásadě vám umožňuje extrahovat specializovaná data ze sbírky generalizovaných dat.

Jak fungují streamy

Plynovod vždy začíná zdrojem. Typ zdroje závisí na typu dat, se kterými pracujete, ale dvě z nejpopulárnějších jsou pole a kolekce.



Chcete -li transformovat kolekci na počáteční stream, budete muset přidat proud() funkci ke zdroji. Tím se zdroj umístí do kanálu toku, kde proběhne několik různých mezilehlých operací (jako např filtr() a třídit () ) to může operovat.

Poté, co jsou provedeny všechny požadované mezilehlé operace, můžete zavést terminálovou operaci (jako např pro každého() ), která vytvoří dříve extrahovaná data ze zdroje.





Život bez proudů

Java 8 byla vydána v roce 2014, ale ještě předtím vývojáři Java potřebovali extrahovat specializovaná data ze sbírky obecných dat.

nahrává zvuk z obrazovky iphone?

Řekněme, že máte seznam náhodných znaků, které jsou kombinovány s náhodnými čísly a vytvářejí jedinečné hodnoty řetězců, ale chcete pouze hodnoty, které začínají znakem C a chcete uspořádat výsledek ve vzestupném pořadí. Takto byste tato data extrahovali bez streamů.





Příbuzný: Co potřebujete vědět o používání řetězců v Javě

Filtrování a třídění hodnot bez streamů Příklad


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

Budete také muset deklarovat a inicializovat seznam polí, ať už používáte streamy nebo jiný způsob extrakce. To, co byste nemuseli dělat, kdybyste používali streamy, je deklarovat novou proměnnou, která bude uchovávat požadované hodnoty, ani nevytvářet dalších pět plus řádků kódu ve výše uvedeném příkladu.

Příbuzný: Jak vytvářet a provádět operace na polích v Javě

Výše uvedený kód vytváří v konzole následující výstup:


C11
C12
C13
C14
C15
C16

Život se streamy

V programování efektivita hovoří o vytváření stejného výsledku s výrazně menším počtem kódů. To je přesně to, co stream stream dělá pro programátora. Příště se tedy někdo zeptá: proč je důležité ve vašem projektu používat streamy? Jednoduše řečeno: streamy podporují efektivní programování.

Pokračováním výše uvedeného příkladu je to, jak zavedení proudů transformuje celý program.

Filtrování a třídění hodnot pomocí příkladu streamu


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Výše uvedený kód ukazuje, jak výkonné je rozhraní streamu. Trvá seznam náhodných hodnot pole a transformuje je do proudu pomocí proud() funkce. Datový proud se poté zredukuje na seznam polí, který obsahuje požadované hodnoty (což jsou všechny hodnoty začínající na C ), za použití filtr() funkce.

Jak vidíte na výše uvedeném příkladu, C hodnoty jsou náhodně uspořádány v seznamu polí. Pokud byste měli vytisknout stream v tomto bodě potrubí, hodnotu C15 bude vytištěno jako první. Proto třídit () funkce je zavedena do kanálu streamu za účelem uspořádání nového pole ve vzestupném pořadí.

Konečnou funkcí v toku dat je a pro každého() funkce. Toto je funkce terminálu, která se používá k zastavení kanálu streamu a v konzole produkuje následující výsledky:


C11
C12
C13
C14
C15
C16

Stream meziproduktů

Existuje rozsáhlý seznam mezilehlých operací, které lze použít v kanálu streamu.

Plynovod vždy začíná jedním zdrojem a proud() funkce a vždy končí jediným terminálním provozem (i když na výběr je několik různých.) Mezi těmito dvěma sekcemi je ale seznam šesti mezilehlých operací, které můžete použít.

V našem příkladu výše jsou použity pouze dvě z těchto mezilehlých operací --- filtr() a třídit () . Mezilehlá operace, kterou zvolíte, bude záviset na úkolech, které chcete provést.

Pokud by některá z hodnot začínajících na C v našem seznamu polí výše byla malá a provedli bychom na nich stejné mezilehlé operace, dostali bychom následující výsledek.

Provádění operací filtrování a řazení na malých hodnotách Příklad


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Výše uvedený kód vytvoří v konzole následující hodnoty:


C11
C12
C14
C15

Jediným problémem výše uvedeného výstupu je, že nereprezentuje přesně všechny C hodnoty v našem seznamu polí. Dobrým způsobem, jak tuto malou chybu opravit, je zavést do kanálu proudu další přechodnou operaci; tato operace je známá jako mapa() funkce.

Použití příkladu funkce mapy


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

The mapa() funkce transformuje objekt z jednoho stavu do druhého; v našem příkladu výše transformuje všechny malé znaky v seznamu polí na velká písmena.

Umístění mapa() fungovat těsně před filtr() funkce načte všechny hodnoty, které začínají C ze seznamu polí.

Výše uvedený kód vytváří v konzole následující výsledek, který úspěšně reprezentuje všechny C hodnoty v seznamu polí.


C11
C12
C13
C14
C15
C16

Mezi další tři mezilehlé operace, které můžete použít ve svých aplikacích, patří:

  • nahlédnout ()
  • omezit()
  • přeskočit()

Streamy Java 8 usnadňují vytváření efektivního kódu

Pomocí streamů Java 8 můžete extrahovat extra specifická a relevantní data z velkého zdroje pomocí jednoho řádku kódu. Pokud zahrnete počáteční proud() Funkce a operátor terminálu, můžete použít libovolnou kombinaci mezilehlých operací, které poskytují vhodné výstupy pro váš cíl.

jak dlouho na zátěžový test CPU

Pokud vás zajímá řada kódu uzavřená v našem filtr() funkce; je známý jako „výraz lambda“. Výrazy Lambda jsou další funkcí zavedenou v Javě 8 a obsahuje spoustu nugetů, které by se vám mohly hodit.

Podíl Podíl tweet E-mailem Rychlý úvod do Java 8 Lambdas

Pokud jste programátorem Java a máte zájem dozvědět se více o lambdách Java 8, v tomto článku se blíže podíváme na syntaxi a použití lambda.

Číst dále
Související témata
  • Programování
  • Jáva
  • Návody na kódování
O autorovi Kadeisha Kean(21 článků zveřejněno)

Kadeisha Kean je vývojář softwaru a technický/technologický spisovatel v plném zásobníku. Má výraznou schopnost zjednodušit některé z nejsložitějších technologických konceptů; produkující materiál, kterému každý technologický nováček snadno porozumí. Je nadšená psaním, vývojem zajímavého softwaru a cestováním po světě (prostřednictvím dokumentů).

Více od Kadeisha Kean

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru