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

Před vydáním prostředí Java 8 by použití výrazu „stream“ v Javě bylo automaticky spojeno s I / O. Java 8 však představila proud, který lze označit jako sadu výpočtových kroků zřetězených dohromady v tom, co se běžně označuje jako „potrubní proud“.

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

Co je to stream?

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

Jak proudy fungují

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

Chcete-li transformovat kolekci na počáteční stream, budete muset přidat proud() funkce ke zdroji. Tím se zdroj umístí do kanálu proudu, kde je několik různých mezilehlých operací (například

instagram viewer
filtr() a sort ()) může na něm pracovat.

Po provedení všech požadovaných mezilehlých operací můžete zavést terminálovou operaci (například pro každého()), který vytvoří dříve extrahovaná data ze zdroje.

Život bez proudů

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

Ř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ězce, ale chcete pouze hodnoty, které začínají znakem „C“, a chcete uspořádat výsledek vzestupně objednat. Takto byste extrahovali tato data bez streamů.

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

Příklad filtrování a řazení hodnot bez proudů


importovat java.util. ArrayList;
importovat java.util. Pole;
importovat java.util. Seznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje seznam polí
Seznam 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“
);
// deklaruje, že seznam polí uloží potřebné hodnoty
Seznam requiredValues ​​= new ArrayList <> ();
// extrakce požadovaných hodnot a jejich uložení do reqquiredValues
randomValues.forEach (hodnota -> {
if (value.startsWith ("C")) {
requiredValues.add (hodnota);
}
});
// seřadí požadované hodnoty vzestupně
requiredValues.sort ((String value1, String value2) -> value1.compareTo (value2));
// tisk každé hodnoty do konzoly
requiredValues.forEach ((hodnota řetězce) -> System.out.println (hodnota));
}
}

Také budete muset deklarovat a inicializovat seznam polí, ať už používáte streamy nebo jinou metodu extrakce. Co byste nemuseli dělat, pokud používáte streamy, je deklarovat novou proměnnou, která bude obsahovat 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áří následující výstup v konzole:


C11
C12
C13
C14
C15
C16

Život s proudy

V programování hovoří efektivita k dosažení stejného výsledku s výrazně menším množstvím kódu. To je přesně to, co streamovací kanál dělá pro programátora. Až se příště někdo zeptá: „proč je ve vašem projektu důležité používat proudy?“ 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 řazení hodnot pomocí příkladu streamu


importovat java.util. Pole;
importovat java.util. Seznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje seznam polí
Seznam 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“
);
// načte pouze hodnoty, které začínají písmenem C, seřadí je a vytiskne je na konzoli.
randomValues.stream (). filter (value-> value.startsWith ("C")). ordered (). forEach (System.out:: println);
}
}

Výše uvedený kód ukazuje, jak výkonné je rozhraní streamu. Vezme seznam náhodných hodnot pole a transformuje jej do proudu pomocí proud() funkce. Proud se poté sníží 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 ve výše uvedeném příkladu, C hodnoty jsou náhodně uspořádány v seznamu polí. Pokud byste měli tisknout stream v tomto bodě v potrubí, hodnota C15 bude vytištěno jako první. Proto sort () Do kanálu proudu je zavedena funkce pro uspořádání nového pole ve vzestupném pořadí.

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


C11
C12
C13
C14
C15
C16

Existuje rozsáhlý seznam zprostředkujících operací, které lze použít v kanálu proudu.

Potok proudu vždy začíná jedním zdrojem a proud() funkce a vždy končí jedinou operací terminálu (i když existuje několik různých) ale mezi těmito dvěma částmi je seznam šesti mezilehlých operací, které můžete použití.

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

Pokud by některá z hodnot, které začínají písmenem „C“ v našem seznamu polí, byla malá, a provedli jsme s nimi stejné mezilehlé operace, dostali bychom následující výsledek.

Příklad provedení operací filtrování a řazení na malých hodnotách


importovat java.util. Pole;
importovat java.util. Seznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje seznam polí
Seznam 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“
);
// načte pouze hodnoty, které začínají písmenem C, seřadí je a vytiskne je na konzoli.
randomValues.stream (). filter (value-> value.startsWith ("C")). ordered (). forEach (System.out:: println);
}
}

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


C11
C12
C14
C15

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

Příklad použití mapové funkce


importovat java.util. Pole;
importovat java.util. Seznam;
public class Main {
public static void main (String [] args) {
// deklaruje a inicializuje seznam polí
Seznam 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“
);
// transformuje všechny malá písmena na velká písmena,
// načte pouze hodnoty, které začínají písmenem C, seřadí je a vytiskne je na konzoli.
randomValues.stream (). map (String:: toUpperCase) .filter (value-> value.startsWith ("C")). tříděný (). 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á písmena v seznamu polí na velká písmena.

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

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


C11
C12
C13
C14
C15
C16

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

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

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

S proudy Java 8 můžete extrahovat mimořádně 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.

Pokud vás zajímá řádek kódu v naší filtr() funkce; je známý jako „výraz lambda“. Výrazy lambda jsou další funkcí zavedenou v prostředí Java 8 a má spoustu nugetů, které vám mohou připadat užitečné.

E-mailem
Stručný úvod do prostředí Java 8 Lambdas

Pokud jste programátor v jazyce 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.

Přečtěte si další

Související témata
  • Programování
  • Jáva
  • Výukové programy pro kódování
O autorovi
Kadeisha Kean (13 článků publikováno)

Kadeisha Kean je vývojář softwaru a technický a technologický autor. Má výraznou schopnost zjednodušit některé z nejsložitějších technologických konceptů; výroba materiálu, kterému snadno porozumí každý technologický nováček. Nadšeně se věnuje psaní, vývoji zajímavého softwaru a cestování 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 s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!

Ještě jeden krok…!

V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.

.