prominent java 8 features with code examples
Úplný seznam a vysvětlení všech významných funkcí představených ve verzi Java 8 s příklady:
Vydání Java 8 od společnosti Oracle bylo revolučním vydáním světové vývojové platformy č. 1. Zahrnoval obrovský upgrade programovacího modelu Java jako celku spolu s vývojem JVM, jazyka Java a knihoven koordinovaným způsobem.
Toto vydání zahrnovalo několik funkcí pro snadné použití, produktivitu, vylepšené programování Polyglot, zabezpečení a celkově vylepšený výkon.
Co se naučíte:
- Funkce přidané k vydání Java 8
- Funkční rozhraní a výrazy lambda
- Metoda forEach () v Iterovatelném rozhraní
- Volitelná třída
- Výchozí a statické metody v rozhraních
- Odkazy na metody
- Rozhraní Java Stream API pro hromadné datové operace ve sbírkách
- Java Date Time API
- JavaScriptový stroj Rhinoceros
- Dekódování kódování Base64
- Vylepšení kolekce API
- Změny / vylepšení API souběžnosti
- Vylepšení Java IO
- Různá vylepšení jádra API
- Závěr
Funkce přidané k vydání Java 8
Mezi hlavní změny patří následující významné funkce, které byly přidány do této verze.
- Funkční rozhraní a výrazy lambda
- metoda forEach () v Iterovatelném rozhraní
- Volitelná třída,
- výchozí a statické metody v rozhraních
- Odkazy na metody
- Rozhraní Java Stream API pro hromadné datové operace ve sbírkách
- Java Date Time API
- Vylepšení kolekce API
- Vylepšení API souběžnosti
- Vylepšení Java IO
- JavaScriptový stroj Rhinoceros
- Dekódování kódování Base64
- Různá vylepšení jádra API
V tomto tutoriálu probereme každou z těchto funkcí krátce a pokusíme se každou z nich vysvětlit pomocí jednoduchých a snadných příkladů.
Funkční rozhraní a výrazy lambda
Java 8 zavádí anotaci známou jako @FunctionalInterface, která je obvykle pro chyby na úrovni kompilátoru. Obvykle se používá, když rozhraní, které používáte, porušuje smlouvy funkčního rozhraní.
Alternativně můžete zavolat funkční rozhraní jako rozhraní SAM nebo rozhraní Single Abstract Method. Funkční rozhraní umožňuje jako člen právě jednu „abstraktní metodu“.
Níže je uveden příklad funkčního rozhraní:
@FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); }
Můžete vynechat anotaci, @FunctionalInterface a vaše funkční rozhraní bude stále platné. Tuto anotaci používáme pouze k tomu, abychom informovali kompilátor, že rozhraní bude mít jedinou abstraktní metodu.
Poznámka: Podle definice jsou výchozí metody jiné než abstraktní a do funkčního rozhraní můžete přidat tolik výchozích metod, kolik chcete.
Zadruhé, pokud má rozhraní abstraktní metodu, která má přednost před jednou z veřejných metod „java.lang.object“, není považováno za abstraktní metodu rozhraní.
Níže je uveden platný příklad funkčního rozhraní.
@FunctionalInterface public interface FunctionalInterface_one { public void firstInt_method(); @Override public String toString(); //Overridden from Object class @Override public boolean equals(Object obj); //Overridden from Object class }
Výraz Lambda (nebo funkci) lze definovat jako anonymní funkci (funkce bez názvu a identifikátoru). Výrazy lambda jsou definovány přesně na místě, kde jsou potřeba, obvykle jako parametr nějaké jiné funkce.
Z jiné perspektivy vyjadřuje Lambda Expressions instance Funkční rozhraní (popsáno výše). Lambda Expressions implementují jedinou abstraktní funkci přítomnou ve funkčním rozhraní a tak implementují funkční rozhraní.
Základní syntaxe výrazu Lambda je:
zkopírovat pole do jiného pole java
Základní příklad výrazu lambda je:
Výše uvedený výraz má dva parametry xay a vrací jeho součet x + y. Na základě datového typu xay lze metodu použít několikrát na různých místech. Parametry x a y tedy budou odpovídat int nebo Integer a string a na základě kontextu přidá dvě celá čísla (pokud jsou parametry int) nebo spojí dva řetězce (když jsou parametry řetězec).
Pojďme implementovat program, který demonstruje výrazy Lambda.
interface MyInterface { void abstract_func(int x,int y); default void default_Fun() { System.out.println('This is default method'); } } class Main { public static void main(String args()) { //lambda expression MyInterface fobj = (int x, int y)->System.out.println(x+y); System.out.print('The result = '); fobj.abstract_func(5,5); fobj.default_Fun(); } }
Výstup:
Výše uvedený program ukazuje použití Lambda Expression k přidání k parametrům a zobrazuje jejich součet. Potom to použijeme k implementaci abstraktní metody „abstract_fun“, kterou jsme deklarovali v definici rozhraní. Výsledkem volání funkce „abstract_fun“ je součet dvou celých čísel předaných jako parametry při volání funkce.
Další informace o výrazech Lambda se dozvíme dále v tomto kurzu.
Metoda forEach () v Iterovatelném rozhraní
Java 8 zavedla metodu „forEach“ v rozhraní java.lang.Iterable, která může iterovat přes prvky v kolekci. „ForEach“ je výchozí metoda definovaná v rozhraní Iterable. Používají ho třídy Collection, které rozšiřují Iterable rozhraní o iteraci prvků.
Metoda „forEach“ bere funkční rozhraní jako jediný parametr, tj. Můžete předat výraz Lambda jako argument.
Příklad metody forEach ().
importjava.util.ArrayList; importjava.util.List; public class Main { public static void main(String() args) { List subList = new ArrayList(); subList.add('Maths'); subList.add('English'); subList.add('French'); subList.add('Sanskrit'); subList.add('Abacus'); System.out.println('------------Subject List--------------'); subList.forEach(sub -> System.out.println(sub)); } }
Výstup:
Takže máme sbírku předmětů, tj. SubList. Obsah subList zobrazujeme pomocí metody forEach, která k tisku každého prvku vyžaduje výraz Lambda.
Volitelná třída
Java 8 představila volitelnou třídu v balíčku „java.util“. „Volitelné“ je veřejná závěrečná třída a používá se k řešení NullPointerException v aplikaci Java. Pomocí volitelné můžete zadat alternativní kód nebo hodnoty ke spuštění. Použitím Optional nemusíte používat příliš mnoho kontrol null, abyste se vyhnuli nullPointerException.
Můžete použít třídu Optional, abyste se vyhnuli neobvyklému ukončení programu a zabránili zhroucení programu. Třída Optional poskytuje metody, které se používají ke kontrole přítomnosti hodnoty pro konkrétní proměnnou.
Následující program demonstruje použití volitelné třídy.
import java.util.Optional; public class Main{ public static void main(String() args) { String() str = new String(10); OptionalcheckNull = Optional.ofNullable(str(5)); if (checkNull.isPresent()) { String word = str(5).toLowerCase(); System.out.print(str); } else System.out.println('string is null'); } }
Výstup:
V tomto programu používáme vlastnost „ofNullable“ třídy Optional ke kontrole, zda je řetězec null. Pokud ano, je uživateli vytištěna příslušná zpráva.
Výchozí a statické metody v rozhraních
V Javě 8 můžete do rozhraní přidat metody, které nejsou abstraktní, tj. Můžete mít rozhraní s implementací metody. Klíčové slovo Default a Static můžete použít k vytvoření rozhraní s implementací metody. Výchozí metody umožňují hlavně funkci Lambda Expression.
Pomocí výchozích metod můžete do rozhraní ve svých knihovnách přidat nové funkce. Tím zajistíte, že kód napsaný pro starší verze je kompatibilní s těmito rozhraními (binární kompatibilita).
Pochopme výchozí metodu na příkladu:
import java.util.Optional; interface interface_default { default void default_method(){ System.out.println('I am default method of interface'); } } class derived_class implements interface_default{ } class Main{ public static void main(String() args){ derived_class obj1 = new derived_class(); obj1.default_method(); } }
Výstup:
jaké je nejlepší bezplatné odstranění virů
Máme rozhraní s názvem „interface_default“ s metodou default_method () s výchozí implementací. Dále definujeme třídu „derived_class“, která implementuje rozhraní „interface_default“.
Všimněte si, že jsme v této třídě neimplementovali žádné metody rozhraní. Potom v hlavní funkci vytvoříme objekt třídy „derived_class“ a přímo zavoláme „default_method“ rozhraní, aniž bychom ho museli definovat ve třídě.
Toto je použití výchozích a statických metod v rozhraní. Pokud však třída chce přizpůsobit výchozí metodu, můžete poskytnout její vlastní implementaci přepsáním metody.
Odkazy na metody
Funkce odkazu na metodu zavedená v prostředí Java 8 je zkratkovou notací pro Lambda Expressions pro volání metody funkčního rozhraní. Takže pokaždé, když použijete výraz Lambda k odkazování na metodu, můžete svůj výraz Lambda nahradit odkazem na metodu.
Příklad odkazu na metodu.
import java.util.Optional; interface interface_default { void display(); } class derived_class{ public void classMethod(){ System.out.println('Derived class Method'); } } class Main{ public static void main(String() args){ derived_class obj1 = new derived_class(); interface_default ref = obj1::classMethod; ref.display(); } }
Výstup:
V tomto programu máme rozhraní „interface_default“ s abstraktní metodou „display ()“. Dále existuje třída „derived_class“, která má veřejnou metodu „classMethod“, která vytiskne zprávu.
V hlavní funkci máme objekt pro třídu a pak máme odkaz na rozhraní, které odkazuje na metodu třídy „classMethod“ prostřednictvím obj1 (objekt třídy). Nyní, když je zobrazení abstraktní metody voláno odkazem na rozhraní, zobrazí se obsah classMethod.
Rozhraní Java Stream API pro hromadné datové operace ve sbírkách
Stream API je další významnou změnou zavedenou v prostředí Java 8. Stream API se používá ke zpracování kolekce objektů a podporuje jiný typ iterace. Stream je posloupnost objektů (prvků), která vám umožňuje připravit různé metody k dosažení požadovaných výsledků.
Stream není datová struktura a přijímá svůj vstup ze sbírek, polí nebo jiných kanálů. Pomocí Streamů můžeme zavést různé mezilehlé operace a operace terminálu vrátí výsledek. Stream API budeme diskutovat podrobněji v samostatném výukovém programu Java.
Java Date Time API
Java 8 zavádí nové API pro datum a čas v rámci balíčku java.time.
Mezi nejdůležitější třídy patří:
- Místní: Zjednodušené rozhraní pro datum a čas bez složitosti zpracování časové zóny.
- Pásmový: Specializované date-time API pro řešení různých časových pásem.
Termíny
Třída data je v Javě 8 zastaralá.
Níže jsou uvedeny nové třídy:
nejlepší společnosti pro videohry pro rok 2018
- LocalDate třída definuje datum. Nemá žádné zastoupení pro čas nebo časové pásmo.
- Místní čas třída definuje čas. Nemá žádné zastoupení pro datum nebo časové pásmo.
- LocalDateTime třída definuje datum a čas. Nemá žádnou reprezentaci časového pásma.
Chcete-li zahrnout informace o časovém pásmu s funkcí data, můžete použít Lambda, která poskytuje 3 třídy, tj. OffsetDate, OffsetTime a OffsetDateTime. Zde je offset časové zóny znázorněn pomocí jiné třídy - „ZoneId“. Tomuto tématu se budeme podrobně věnovat v dalších částech této série Java.
JavaScriptový stroj Rhinoceros
Java 8 představila mnohem vylepšený engine pro JavaScript, tj. Nashorn, který nahrazuje stávající Rhino. Nashorn přímo kompiluje kód v paměti a poté předá bytecode do JVM, čímž se výkon zvýší desetkrát.
Nashorn představuje nový nástroj příkazového řádku - jjs, který na konzole spouští kód JavaScript.
Vytvořme soubor JavaScript „sample.js“, který obsahuje následující kód.
print (‘Hello, World!!’);
V konzole zadejte následující příkaz:
C: Java jjs sample.js
Výstup: Ahoj světe!!
Můžeme také spouštět programy JavaScriptu v interaktivním režimu a také jim poskytovat argumenty.
Dekódování kódování Base64
V Javě 8 je zabudované kódování a dekódování pro kódování Base64. Třída pro kódování Base64 je java.util.Base64.
Tato třída poskytuje tři kódování a dekodéry Base64:
- Základní: V tomto je výstup mapován na sadu znaků mezi A-Za-z0-9 + /. Kodér nepřidává na výstup žádný řádek a dekodér odmítá jakýkoli znak kromě výše uvedeného.
- URL: Zde je výstupem adresa URL a název bezpečného souboru je namapován na sadu znaků mezi A-Za-z0-9 + /.
- MIM: V tomto typu kodéru je výstup mapován do formátu vhodného pro MIME.
Vylepšení kolekce API
Java 8 přidala do API Collection následující nové metody:
- forEachRemaining (Akce spotřebitele): Toto je výchozí metoda a je pro Iterator. Provádí „akci“ pro každý ze zbývajících prvků, dokud nejsou zpracovány všechny prvky nebo „akce“ vyvolá výjimku.
- Výchozí metoda pro kolekci removeIf (filtr predikátů): Tím se odstraní všechny prvky v kolekci, které splňují daný „filtr“.
- Spliterator (): Toto je metoda kolekce a vrací instanci rozdělovače, kterou můžete použít k procházení prvků sekvenčním nebo paralelním způsobem.
- Sbírka map má metody replaceAll (), compute () a merge ().
- Třída HashMap s kolizemi klíčů byla vylepšena, aby se zlepšil výkon.
Změny / vylepšení API souběžnosti
Následuje důležitá vylepšení v souběžném API:
- ConcurrentHashMap je vylepšena následujícími metodami:
- vypočítat (),
- pro každého (),
- forEachEntry (),
- forEachKey (),
- forEachValue (),
- jít (),
- snížit () a
- Vyhledávání ()
- Metoda „newWorkStealingPool ()“ pro exekutory vytváří fond vláken krádeže práce. Jako cílovou úroveň paralelismu používá dostupné procesory.
- Metodu „completableFuture“ můžeme explicitně dokončit (nastavením její hodnoty a stavu).
Vylepšení Java IO
Vylepšení IO provedená v prostředí Java 8 zahrnují:
- Files.list (cesta dir): Tím se vrací prázdně naplněný stream, jehož každý prvek je záznam v adresáři.
- Files.lines (cesta cesty): Přečte všechny řádky ze streamu.
- Files.find (): Vyhledejte soubory ve stromu souborů zakořeněné v daném počátečním souboru a vraťte proud naplněný cestou.
- BufferedReader.lines (): Vrátí datový proud s každým jeho prvkem jako řádky přečtené z BufferedReader.
Různá vylepšení jádra API
Máme následující různá vylepšení API:
- Statická metoda withInitial (dodavatel dodavatelů) ThreadLocal pro snadné vytvoření instance.
- Rozhraní „Komparátor“ je rozšířeno o výchozí a statické metody pro přirozené pořadí v opačném pořadí atd.
- Třídy integer, long a double wrapper mají metody min (), max () a sum ().
- Logická třída je vylepšena metodami logickéAnd (), logickéOr () a logickéXor ().
- Ve třídě Math je zavedeno několik užitných metod.
- Most JDBC-ODBC je odstraněn.
- Paměťový prostor PermGen je odstraněn.
Závěr
V tomto kurzu jsme diskutovali o hlavních funkcích, které byly přidány do verze Java 8. Protože Java 8 je hlavní vydání z prostředí Java, je důležité znát všechny funkce a vylepšení, která byla v rámci tohoto vydání provedena.
I když je nejnovější verze Java 13, je stále dobré se seznámit s funkcemi Java 8. Všechny funkce popsané v tomto kurzu jsou stále přítomny v nejnovější verzi Java a budeme je dále diskutovat jako jednotlivá témata dále v této sérii.
Doufáme, že vám tento návod pomohl seznámit se s různými funkcemi prostředí Java 8 !!
Doporučené čtení
- Výukový program Java Array Length s příklady kódu
- Java „toto“ klíčové slovo: Výukový program s příklady kódu
- Výukový program pro rozhraní Java a abstraktní třídu s příklady
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video
- Implementace Java: Vytvoření a spuštění souboru Java JAR
- C ++ Vs Java: Top 30 rozdílů mezi C ++ a Java s příklady
- Metoda MongoDB Sort () s příklady
- Prozkoumejte základy Java v selenu pomocí příkladů