logo

anyMatch() a Java 8

A Java 8, anyMatch() és un mètode definit a la interfície Stream. Realitza a funcionament del terminal de curtcircuit. En aquesta secció, parlarem de mètode anyMatch() a Java 8 Stream amb un exemple. Abans de passar al punt, en primer lloc, entendrem en detall les operacions intermèdies i terminals.

Al flux de Java 8, les operacions del flux es divideixen en intermedi (com Stream.filter, Stream.map) i terminal (com Stream.forEach, Steam.reduce) operacions. Per obtenir els resultats desitjats, hem de combinar aquestes operacions que formen canonades de corrent.

Operacions intermèdies

Les operacions intermèdies són mandroses (és a dir, no realitzen l'operació real, sinó que retornen un flux nou) per naturalesa. Vol dir, conservar els elements del flux inicial i retornar sempre un nou flux del flux inicial. Tingueu en compte que l'execució de la canonada no comença fins que s'executa l'operació terminal de la canonada.

Les operacions intermèdies es divideixen a més en apàtrida operacions (com ara filtre i mapa) i amb estat operacions (com diferents i ordenades).

Operació sense estat

Les operacions sense estat no conserven l'estat dels elements vists anteriorment mentre processen un element nou. Cada element es pot processar independentment de les operacions sobre altres elements.

Operació amb estat

Les operacions amb estat conserven l'estat dels elements vists anteriorment mentre processen els nous elements. La propietat de l'operació amb estat és que processa tota l'entrada abans de produir un resultat.

Suposem que estem realitzant l'operació d'ordenació sobre el flux i volem produir el resultat d'aquest flux sense veure tots els elements del flux, cosa que no és possible. Per tant, fins que no es veuen tots els elements del corrent, no es pot produir el resultat. Per tant, hem de processar tota l'entrada abans de produir el resultat.

Operació de la terminal

Les operacions terminals travessen el flux per produir un resultat o efecte secundari. Tan bon punt s'executa l'operació del terminal, la canonada de corrent es considera consumida. Després del consum, ja no es pot utilitzar. En cas que necessitem travessar la mateixa font de dades (seqüència), retorneu el flux per obtenir un nou flux.

mètode de subcadenes de Java

Gairebé totes les operacions del terminal són de naturalesa ansiosa. Vol dir que travessen el rierol i processen la canonada abans de tornar. Tingueu en compte que no està permès en operacions de dos terminals, és a dir, iterator() i spliterator().

A més de les operacions anteriors, hi ha una altra operació coneguda com curtcircuit funcionament. Tant les operacions intermèdies com les terminals poden provocar un curtcircuit.

An operació intermèdia està en curtcircuit si hi ha un flux amb entrada infinita. Com a resultat, pot produir un flux finit.

A funcionament del terminal està en curtcircuit si hi ha un flux amb entrada infinita. Pot acabar en un temps finit.

Observem que utilitzar una operació de curtcircuit a la canonada és essencial però no suficient. Hi ha una condició per processar un corrent infinit que és finalitzar l'operació normalment en un temps finit.

Java 8 Stream.anyMatch()

Retorna si algun element d'aquest flux coincideix amb el predicat proporcionat. Pot ser que no avaluï el predicat en tots els elements si no és necessari per determinar el resultat.

Sintaxi:

 boolean anyMatch(Predicate predicate) 

Paràmetres: Accepta a no interferir i apàtrida predicat que s'ha d'aplicar als elements del flux d'entrada.

Devolucions: Torna veritat si algun element coincideix amb el predicat especificat, en cas contrari retorna fals. Retorna fals, si el flux està buit. En el cas d'un flux buit, el predicat no s'avalua.

arquitectura de xarxa

Exemple de 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); } } 

Sortida:

 true 

L'exemple següent mostra un flux buit sempre retorna false.

AnyMatchExample2.java

què és internet
 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); } } 

Sortida:

 false 

Vegem un altre programa Java en què hem analitzat diversos predicats.

Per satisfer diverses condicions, creeu un predicat compost amb dos o més predicats simples. En l'exemple donat, tenim una llista d'empleats. Volem comprovar si hi ha un empleat que tingui 28 anys i el nom comenci per l'alfabet R. El següent programa Java representa el mateix.

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>

Sortida:

 true true false 

La interfície Stream proporciona un altre mètode per fer coincidir el predicat especificat, és a dir. allMatch() . La diferència entre allMatch() i anyMatch() és que retorna anyMatch(). veritat si algun dels elements d'un flux coincideix amb el predicat especificat. Quan utilitzeu allMatch(), tots els elements han de coincidir amb el predicat donat.

Per tant, el mètode anyMatch() es pot utilitzar en el cas determinat quan volem comprovar si hi ha almenys un element al flux. El mètode contains() de la classe List també realitza la mateixa operació. Per tant, també podem utilitzar el mètode contains() en lloc del mètode anyMatch().

Per tant, no hi ha cap diferència entre el mètode List.contains() i Stream.anyMatch().