logo

anyMatch() v jazyku Java 8

V Java 8 je anyMatch() metóda definovaná v rozhraní Stream. Vykonáva a prevádzka skratovej svorky. V tejto časti budeme diskutovať o metóda anyMatch() v Java 8 Stream s príkladom. Predtým, ako prejdeme k veci, najprv podrobne porozumieme medziľahlým a terminálnym operáciám.

V streame Java 8 sú operácie streamu rozdelené na medziprodukt (ako Stream.filter, Stream.map) a terminál (ako Stream.forEach, Steam.reduce) operácie. Aby sme dosiahli požadované výsledky, musíme spojiť tieto operácie, ktoré tvoria prúdové potrubia.

Medziľahlé operácie

Medziľahlé operácie sú vo svojej podstate lenivé (to znamená, že nevykonávajú skutočnú operáciu, namiesto toho vrátia nový prúd). Znamená to zachovať prvky pôvodného prúdu a vždy vrátiť nový prúd pôvodného prúdu. Všimnite si, že realizácia potrubia sa nezačne, kým sa nevykoná koncová prevádzka potrubia.

Medzioperácie sa ďalej delia na bezstavový operácie (ako filter a mapa) a stavový operácie (ako odlišné a triedené).

string int

Bezstavová operácia

Bezstavové operácie si počas spracovania nového prvku nezachovajú stav z predtým videných prvkov. Každý prvok môže byť spracovaný nezávisle od operácií na iných prvkoch.

Stavová prevádzka

Stavové operácie zachovávajú stav z predtým videných prvkov pri spracovaní nových prvkov. Vlastnosťou stavovej operácie je, že spracuje celý vstup pred vytvorením výsledku.

Predpokladajme, že vykonávame operáciu triedenia cez prúd a chceme vytvoriť výsledok z tohto prúdu bez toho, aby sme videli všetky prvky prúdu, čo nie je možné. Preto, kým človek nevidí všetky prvky prúdu, nemôže vyprodukovať výsledok. Preto musíme pred vytvorením výsledku spracovať celý vstup.

Prevádzka terminálu

Koncové operácie prechádzajú prúdom a vytvárajú výsledok alebo vedľajší účinok. Hneď po vykonaní terminálnej operácie sa prúdové potrubie považuje za spotrebované. Po spotrebovaní sa už nedá použiť. V prípade, že požadujeme prejsť ten istý zdroj údajov (stream), vráťte stream a získajte nový stream.

Takmer všetky terminálové operácie sú dychtivé. To znamená, že prechádzajú prúdom a spracovávajú potrubie pred návratom. Všimnite si, že to nie je povolené v operáciách s dvoma terminálmi, t. j. iterator() a spliterator().

Okrem vyššie uvedených operácií existuje ďalšia operácia známa ako skratovanie prevádzka. Medziľahlé aj koncové operácie môžu spôsobiť skrat.

An medzioperačná prevádzka je skratový, ak existuje prúd s nekonečným vstupom. Výsledkom môže byť konečný prúd.

A terminálová prevádzka je skratový, ak existuje prúd s nekonečným vstupom. Môže sa skončiť v konečnom čase.

štandardná odchýlka pandy

Pozorujeme, že použitie skratovej operácie v potrubí je nevyhnutné, ale nie postačujúce. Existuje podmienka na spracovanie nekonečného prúdu, ktorý je ukončiť prevádzku normálne v konečnom čase.

Java 8 Stream.anyMatch()

Vráti, či sa niektoré prvky tohto prúdu zhodujú so zadaným predikátom. Nemusí vyhodnotiť predikát na všetkých prvkoch, ak to nie je potrebné na určenie výsledku.

Syntax:

 boolean anyMatch(Predicate predicate) 

Parametre: Prijíma a nezasahujúce a bezstavový predikát, ktorý sa má použiť na prvky vstupného toku.

Vrátenie: Vracia sa pravda ak sa ktorýkoľvek prvok zhoduje so zadaným predikátom, inak vráti hodnotu false. Ak je stream prázdny, vráti hodnotu false. V prípade prázdneho prúdu sa predikát nevyhodnocuje.

Príklad Java anyMatch().

AnyMatchExample1.java

 import java.util.stream.Stream; public class AnyMatchExample1 { public static void main(String args[]) { Stream stream = Stream.of('Java', 'Python', 'Hadoop', 'C#', 'C++', 'Kotlin'); boolean match = stream.anyMatch(s -> s.contains('Python')); System.out.println(match); } } 

Výkon:

 true 

Nasledujúci príklad znázorňuje, že prázdny prúd vždy vráti hodnotu false.

AnyMatchExample2.java

čo je úľ
 import java.util.Arrays; public class AnyMatchExample2 { public static void main(String args[]) { boolean b = Arrays.asList().stream().anyMatch(e -> true); System.out.println(b); } } 

Výkon:

 false 

Pozrime sa na ďalší Java program, v ktorom sme analyzovali viacero predikátov.

Na splnenie viacerých podmienok vytvorte zložený predikát s dvoma alebo viacerými jednoduchými predikátmi. V uvedenom príklade máme zoznam Zamestnancov. Chceme skontrolovať, či existuje zamestnanec, ktorý má 28 rokov a meno začína na abecedu R. Nasledujúci program Java zobrazuje to isté.

AnyMatchExample.java

 import java.util.List; import java.util.function.Predicate; import java.util.ArrayList; class Employee { int empId; int empAge; String empName; //creating a constructor of the Employee class Employee(int id, int age, String name) { this.empId = id; this.empAge = age; this.empName = name; } public int getEmpId() { return empId; } public int getEmpAge() { return empAge; } public String getEmpName() { return empName; } public static List getEmployee() { //instance of the List class List list = new ArrayList(); //adding elements to the List list.add(new Employee(21, 21, &apos;Andrew&apos;)); list.add(new Employee(23, 28, &apos;Robert&apos;)); list.add(new Employee(32, 29, &apos;Jack&apos;)); list.add(new Employee(12, 31, &apos;Steve&apos;)); list.add(new Employee(15, 27, &apos;Tom&apos;)); list.add(new Employee(19, 29, &apos;Albert&apos;)); return list; } } //driver code public class AnyMatchExample { public static void main(String args[]) { //defining predicates Predicate p1 = e -&gt; e.empName.startsWith(&apos;S&apos;); Predicate p2 = e -&gt; e.empAge <28 && e.empname.startswith('r'); predicate p3="e" -> e.empName.startsWith(&apos;P&apos;); List list = Employee.getEmployee(); //anyMatch() method checks whether any Stream element matches the specified predicate boolean bool1 = list.stream().anyMatch(p1); //prints true if any element of the List starts with the letter s, else prints false System.out.println(bool1); boolean bool2 = list.stream().anyMatch(p2); //prints true if any element of the List starts with the letter z and age is less than 28, else prints false System.out.println(bool2); //anyMatch() method checks whether any Stream element matches the specified predicate boolean bool3 = list.stream().anyMatch(p3); //prints true if any element of the List starts with the letter P, else prints false System.out.println(bool3); } } </28>

Výkon:

 true true false 

Rozhranie Stream poskytuje inú metódu na porovnávanie špecifikovaného predikátu, t.j. allMatch() . Rozdiel medzi allMatch() a anyMatch() je ten, že anyMatch() vracia pravda ak sa niektorý z prvkov v prúde zhoduje so zadaným predikátom. Pri použití allMatch() sa musia všetky prvky zhodovať s daným predikátom.

python uložte json do súboru

Preto je možné použiť metódu anyMatch() v určitom prípade, keď chceme skontrolovať, či sa v streame nachádza aspoň jeden prvok. Metóda obsahuje() triedy List tiež vykonáva rovnakú operáciu. Môžeme teda použiť aj metódu obsahuje() namiesto metódy anyMatch().

Medzi metódou List.contains() a Stream.anyMatch() teda nie je žiadny rozdiel.