Java 8:ssa anyMatch() on Stream-käyttöliittymässä määritetty menetelmä. Se suorittaa a oikosulkupäätteen toiminta. Tässä osiossa keskustelemme anyMatch()-menetelmä Java 8 Streamissa esimerkin kanssa. Ennen kuin siirrymme asiaan, ymmärrämme ensin yksityiskohtaisesti väli- ja päätetoiminnot.
Java 8 -virrassa stream-toiminnot on jaettu keskitason (kuten Stream.filter, Stream.map) ja terminaali (kuten Stream.forEach, Steam.reduce) toiminnot. Haluttujen tulosten saavuttamiseksi meidän on yhdistettävä nämä toiminnot, jotka muodostavat virtausputkia.
Keskitason toiminnot
Välioperaatiot ovat luonteeltaan laiskoja (eli ei suorita varsinaista toimintoa, vaan palauttaa uuden virran). Se tarkoittaa alkuperäisen virran elementtien säilyttämistä ja aina alkuperäisen virran uuden virran palauttamista. Huomaa, että liukuhihnan suoritus ei ala ennen kuin liukuhihnan päätetoiminto on suoritettu.
Välioperaatiot jaetaan edelleen valtioton toiminnot (kuten suodatin ja kartta) ja valtiollinen toiminnot (kuten erilliset ja lajitellut).
joka teki koulun
Valtioton operaatio
Tilattomat toiminnot eivät säilytä aiemmin nähtyjen elementtien tilaa uuden elementin käsittelyn aikana. Jokainen elementti voidaan käsitellä riippumatta muiden elementtien toiminnoista.
Tilallinen toiminta
Tilalliset toiminnot säilyttävät tilan entisistä elementeistä käsitellessään uusia elementtejä. Tilallisen operaation ominaisuus on, että se käsittelee koko syötteen ennen tuloksen tuottamista.
Oletetaan, että suoritamme lajittelua virran yli ja haluamme tuottaa tuloksen tästä virrasta näkemättä kaikkia virran elementtejä, mikä ei ole mahdollista. Siksi tulosta ei voida tuottaa ennen kuin ei näe kaikkia virran elementtejä. Siksi meidän on käsiteltävä koko syöte ennen tuloksen tuottamista.
Terminaalin toiminta
Päätetoiminnot kulkevat virran läpi tuottaakseen tuloksen tai sivuvaikutuksen. Heti kun päätetoiminto on suoritettu, stream-putkilinja katsotaan kulutetuksi. Kulutuksen jälkeen sitä ei voi enää käyttää. Jos joudumme kulkemaan saman tietolähteen (streamin) läpi, palauta stream saadaksesi uuden streamin.
Lähes kaikki terminaalitoiminnot ovat luonteeltaan innokkaita. Se tarkoittaa, että he kulkevat virran poikki ja käsittelevät putkilinjaa ennen paluuta. Huomaa, että se ei ole sallittu kahden terminaalin operaatioissa, eli iterator() ja spliterator().
Yllä olevien toimintojen lisäksi on olemassa toinenkin operaatio, joka tunnetaan nimellä oikosulku operaatio. Sekä väli- että päätetoiminnot voivat aiheuttaa oikosulun.
An välitoiminta on oikosulku, jos on virta, jonka tulo on ääretön. Seurauksena se voi tuottaa rajallisen virran.
A terminaalin toiminta on oikosulku, jos on virta, jonka tulo on ääretön. Se voi päättyä rajallisessa ajassa.
Huomaamme, että oikosulkuoperaation käyttäminen putkilinjassa on välttämätöntä, mutta ei riittävää. On olemassa ehto äärettömän virran käsittelylle lopettaa toiminnan normaalisti rajallisessa ajassa.
Java 8 Stream.anyMatch()
Se palauttaa, vastaavatko mitkään tämän virran elementit annettua predikaattia. Se ei välttämättä arvioi predikaattia kaikille elementeille, jos se ei ole tarpeen tuloksen määrittämiseksi.
string.contains java
Syntaksi:
boolean anyMatch(Predicate predicate)
Parametrit: Se hyväksyy a ei häiritse ja valtioton predikaatti, jota käytetään syöttövirran elementteihin.
Palautukset: Se palaa totta jos jokin elementti vastaa määritettyä predikaattia, muussa tapauksessa palauttaa false. Palauttaa epätosi, jos virta on tyhjä. Tyhjän virran tapauksessa predikaattia ei arvioida.
Java anyMatch() Esimerkki
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); } }
Lähtö:
true
Seuraava esimerkki kuvaa tyhjän virran, joka palauttaa aina epätosi.
AnyMatchExample2.java
java-operaattori
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); } }
Lähtö:
false
Katsotaanpa toinen Java-ohjelma, jossa olemme jäsentäneet useita predikaatteja.
Useiden ehtojen täyttämiseksi luo koostettu predikaatti kahdella tai useammalla yksinkertaisella predikaatilla. Annetussa esimerkissä meillä on luettelo työntekijöistä. Haluamme tarkistaa, onko työntekijää, jonka ikä on 28 ja jonka nimi alkaa aakkosilla R. Seuraava Java-ohjelma kuvaa samaa.
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>
Lähtö:
true true false
Stream-rajapinta tarjoaa toisen menetelmän määritetyn predikaatin sovittamiseksi, ts. allMatch() . Ero allMatch():n ja anyMatch():n välillä on, että anyMatch() palauttaa totta jos jokin virran elementeistä vastaa määritettyä predikaattia. Kun käytetään allMatch(), kaikkien elementtien on vastattava annettua predikaattia.
Siksi anyMatch()-menetelmää voidaan käyttää tietyssä tapauksessa, kun haluamme tarkistaa, onko virrassa vähintään yksi elementti. Myös List-luokan include()-metodi suorittaa saman toiminnon. Joten voimme myös käyttää include()-menetelmää anyMatch()-metodin sijasta.
Näin ollen List.contains()- ja Stream.anyMatch()-metodeissa ei ole eroa.