Java 8 versijoje anyMatch() yra metodas, apibrėžtas srauto sąsajoje. Jis atlieka a trumpojo jungimo terminalo veikimas. Šiame skyriuje aptarsime anyMatch() metodas Java 8 sraute su pavyzdžiu. Prieš pereidami prie taško, pirmiausia išsamiai suprasime tarpines ir terminalo operacijas.
Java 8 sraute srauto operacijos yra suskirstytos į tarpinis (pvz., Stream.filter, Stream.map) ir terminalas (kaip Stream.forEach, Steam.reduce) operacijas. Norėdami gauti norimų rezultatų, turime sujungti šias operacijas, kurios sudaro srauto vamzdynus.
Tarpinės operacijos
Tarpinės operacijos yra tingios (tai reiškia, neatlieka tikrosios operacijos, o grąžina naują srautą). Tai reiškia, kad reikia išlaikyti pradinio srauto elementus ir visada grąžinti naują pradinio srauto srautą. Atkreipkite dėmesį, kad dujotiekio vykdymas neprasideda tol, kol neįvykdoma dujotiekio terminalo operacija.
Tarpinės operacijos dar skirstomos į be pilietybės operacijos (pvz., filtras ir žemėlapis) ir valstybinis operacijas (pvz., atskiras ir surūšiuotas).
Operacija be pilietybės
Operacijos be būsenos neišlaiko būsenos iš anksčiau matytų elementų apdorojant naują elementą. Kiekvienas elementas gali būti apdorojamas nepriklausomai nuo operacijų su kitais elementais.
Valstybinė operacija
Būsenos operacijos išlaiko būseną iš anksčiau matytų elementų, apdorojant naujus elementus. Būsenos operacijos savybė yra ta, kad ji apdoroja visą įvestį prieš pateikdama rezultatą.
Tarkime, mes atliekame rūšiavimo operaciją sraute ir norime gauti rezultatą iš to srauto nematydami visų srauto elementų, o tai neįmanoma. Todėl, kol nematote visų srauto elementų, negalite gauti rezultato. Taigi, prieš pateikdami rezultatą, turime apdoroti visą įvestį.
10 ml iki uncijos
Terminalo veikimas
Terminalo operacijos kerta srautą, kad gautų rezultatą arba šalutinį poveikį. Kai tik baigiama terminalo operacija, srauto vamzdynas laikomas sunaudotu. Po vartojimo jo nebegalima naudoti. Jei mums reikia pereiti tą patį duomenų šaltinį (srauto), grąžinkite srautą, kad gautumėte naują srautą.
Beveik visos terminalo operacijos yra norinčios. Tai reiškia, kad prieš grįždami jie kerta srovę ir apdoroja dujotiekį. Atminkite, kad tai neleidžiama atliekant dviejų terminalų operacijas, ty iterator() ir spliterator().
Be minėtų operacijų, yra dar viena operacija, vadinama trumpasis jungimas operacija. Tiek tarpinėse, tiek galinėse operacijose gali įvykti trumpasis jungimas.
An tarpinė operacija yra trumpasis jungimas, jei yra srautas su begaliniu įėjimu. Dėl to jis gali sukurti baigtinį srautą.
A terminalo veikimas yra trumpasis jungimas, jei yra srautas su begaliniu įėjimu. Jis gali baigtis per ribotą laiką.
Pastebime, kad trumpojo jungimo operacija vamzdyne yra būtina, bet nepakankama. Yra sąlyga apdoroti begalinį srautą normaliai nutraukti veikimą per ribotą laiką.
Java 8 Stream.anyMatch()
Jis grąžina, ar šio srauto elementai atitinka pateiktą predikatą. Jis gali neįvertinti visų elementų predikato, jei tai nėra būtina rezultatui nustatyti.
Sintaksė:
boolean anyMatch(Predicate predicate)
Parametrai: Tai priima a nesikišantis ir be pilietybės predikatas, kuris turi būti taikomas įvesties srauto elementams.
Grąžinimai: Tai grįžta tiesa jei kuris nors elementas atitinka nurodytą predikatą, kitaip grąžina false. Grąžina false, jei srautas tuščias. Tuščio srauto atveju predikatas neįvertinamas.
Java anyMatch() pavyzdys
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); } }
Išvestis:
true
Toliau pateiktame pavyzdyje vaizduojamas tuščias srautas visada pateikia klaidingą.
AnyMatchExample2.java
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); } }
Išvestis:
false
Pažiūrėkime kitą „Java“ programą, kurioje analizavome kelis predikatus.
Norėdami patenkinti kelias sąlygas, sukurkite sudarytą predikatą su dviem ar daugiau paprastų predikatų. Pateiktame pavyzdyje turime darbuotojų sąrašą. Norime patikrinti, ar yra darbuotojo, kurio amžius yra 28 metai, o vardas prasideda abėcėle R. Tą patį pavaizduoja ir ši Java programa.
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, 'Andrew')); list.add(new Employee(23, 28, 'Robert')); list.add(new Employee(32, 29, 'Jack')); list.add(new Employee(12, 31, 'Steve')); list.add(new Employee(15, 27, 'Tom')); list.add(new Employee(19, 29, 'Albert')); return list; } } //driver code public class AnyMatchExample { public static void main(String args[]) { //defining predicates Predicate p1 = e -> e.empName.startsWith('S'); Predicate p2 = e -> e.empAge <28 && e.empname.startswith('r'); predicate p3="e" -> e.empName.startsWith('P'); 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>
Išvestis:
true true false
Stream sąsaja suteikia dar vieną metodą, kaip suderinti nurodytą predikatą t.y. allMatch() . Skirtumas tarp allMatch() ir anyMatch() yra tas, kad anyMatch() grąžina tiesa jei kuris nors iš srauto elementų atitinka nurodytą predikatą. Naudojant allMatch(), visi elementai turi atitikti nurodytą predikatą.
Todėl anyMatch() metodas gali būti naudojamas tam tikru atveju, kai norime patikrinti, ar sraute yra bent vienas elementas. Sąrašo klasės metodas include() taip pat atlieka tą pačią operaciją. Taigi, vietoj anyMatch() metodo taip pat galime naudoti metodą include().
java isempty
Taigi nėra skirtumo tarp List.contains() ir Stream.anyMatch() metodų.