Java 8 versijā anyMatch() ir straumes saskarnē definēta metode. Tā veic a īssavienojuma termināla darbība. Šajā sadaļā mēs apspriedīsim AnyMatch() metode Java 8 straumē ar piemēru. Pirms pāriet uz punktu, vispirms mēs detalizēti sapratīsim starpposma un gala darbības.
Java 8 straumē straumes darbības ir sadalītas starpposma (piemēram, Stream.filter, Stream.map) un terminālis (piemēram, Stream.forEach, Steam.reduce) darbības. Lai iegūtu vēlamos rezultātus, mums ir jāapvieno šīs darbības, kas veido plūsmas cauruļvadus.
Starpposma operācijas
Starpdarbības ir slinkas (tas nozīmē, neveic faktisko darbību, tā vietā atgriež jaunu plūsmu). Tas nozīmē saglabāt sākotnējās straumes elementus un vienmēr atgriezt jaunu sākotnējās straumes straumi. Ņemiet vērā, ka cauruļvada izpilde nesākas, kamēr nav izpildīta cauruļvada gala darbība.
apakšvirkne Java
Starpposma darbības tiek iedalītas tālāk bezvalstnieks darbības (piemēram, filtrs un karte) un štata darbības (piemēram, atšķirīgas un sakārtotas).
Bezvalstnieku operācija
Bezvalstnieku darbības nesaglabā iepriekš redzēto elementu stāvokli, apstrādājot jaunu elementu. Katru elementu var apstrādāt neatkarīgi no darbībām ar citiem elementiem.
Stacionāra darbība
Stāvokļa operācijas saglabā stāvokli no iepriekš redzētajiem elementiem, apstrādājot jaunos elementus. Stāvokļa operācijas īpašība ir tāda, ka tā apstrādā visu ievadi pirms rezultāta radīšanas.
Pieņemsim, ka mēs veicam kārtošanas darbību straumē un vēlamies iegūt rezultātu no šīs straumes, neredzot visus straumes elementus, kas nav iespējams. Tāpēc, kamēr cilvēks neredz visus straumes elementus, nevar iegūt rezultātu. Tāpēc pirms rezultāta iegūšanas mums ir jāapstrādā visa ievade.
Termināļa darbība
Termināļa darbības šķērso straumi, lai radītu rezultātu vai blakusefektu. Tiklīdz termināļa darbība ir izpildīta, straumes cauruļvads tiek uzskatīts par patērētu. Pēc patērēšanas to vairs nevar izmantot. Ja mums ir jāšķērso viens un tas pats datu avots (straume), atgrieziet straumi, lai iegūtu jaunu straumi.
Gandrīz visas termināļa darbības ir dedzīgas. Tas nozīmē, ka viņi šķērso straumi un apstrādā cauruļvadu pirms atgriešanās. Ņemiet vērā, ka tas nav atļauts divu termināļu operācijās, t.i., iterator() un spliterator().
Papildus iepriekšminētajām darbībām ir vēl viena darbība, kas pazīstama kā īssavienojums darbība. Gan starpposma, gan gala operācijās var rasties īssavienojums.
An starpposma darbība ir īssavienojums, ja ir straume ar bezgalīgu ievadi. Rezultātā tas var radīt ierobežotu plūsmu.
masīva c virkne
A termināla darbība ir īssavienojums, ja ir straume ar bezgalīgu ievadi. Tas var beigties ierobežotā laikā.
Mēs novērojam, ka īssavienojuma operācijas izmantošana cauruļvadā ir būtiska, bet nepietiekama. Ir nosacījums, lai apstrādātu bezgalīgu straumi, kas ir normāli pārtraukt darbību ierobežotā laikā.
Java 8 Stream.anyMatch()
Tas atgriež, vai kāds no šīs straumes elementiem atbilst norādītajam predikātam. Tas var nenovērtēt predikātu visos elementos, ja tas nav nepieciešams rezultāta noteikšanai.
Sintakse:
boolean anyMatch(Predicate predicate)
Parametri: Tā pieņem a neiejaucas un bezvalstnieks predikāts, kas jāpiemēro ievades straumes elementiem.
Atgriež: Tas atgriežas taisnība ja kāds elements atbilst norādītajam predikātam, citādi atgriež false. Atgriež false, ja straume ir tukša. Tukšas straumes gadījumā predikāts netiek novērtēts.
Java anyMatch() piemērs
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); } }
Izvade:
true
Nākamajā piemērā ir attēlota tukša straume, kas vienmēr atgriež false.
AnyMatchExample2.java
bash cits, ja
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); } }
Izvade:
false
Apskatīsim citu Java programmu, kurā esam parsējuši vairākus predikātus.
Lai izpildītu vairākus nosacījumus, izveidojiet saliktu predikātu ar diviem vai vairākiem vienkāršiem predikātiem. Dotajā piemērā mums ir darbinieku saraksts. Mēs vēlamies pārbaudīt, vai ir kāds darbinieks, kura vecums ir 28 gadi un vārds sākas ar alfabētu R. Nākamā Java programma attēlo to pašu.
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>
Izvade:
true true false
Straumes interfeiss nodrošina citu metodi norādītā predikāta saskaņošanai, t.i. allMatch() . Atšķirība starp allMatch() un anyMatch() ir tāda, ka atgriež anyMatch(). taisnība ja kāds no straumes elementiem atbilst norādītajam predikātam. Lietojot allMatch(), visiem elementiem ir jāatbilst dotajam predikātam.
Tāpēc anyMatch() metodi var izmantot konkrētajā gadījumā, kad vēlamies pārbaudīt, vai plūsmā ir vismaz viens elements. To pašu darbību veic arī List klases metode include(). Tātad anyMatch() metodes vietā varam izmantot arī metodi include().
Tādējādi nav atšķirības starp List.contains() un Stream.anyMatch() metodi.