logo

anyMatch() w Javie 8

W Javie 8 anyMatch() jest metodą zdefiniowaną w interfejsie Stream. Wykonuje A działanie zacisku zwierającego. W tej części omówimy anyMatch() w strumieniu Java 8 z przykładem. Zanim przejdziemy do sedna, najpierw szczegółowo zrozumiemy operacje pośrednie i końcowe.

W strumieniu Java 8 operacje na strumieniu są podzielone na mediator (jak Stream.filter, Stream.map) i terminal (jak Stream.forEach, Steam.reduce). Aby uzyskać pożądane rezultaty, musimy połączyć te operacje, które tworzą potoki strumieniowe.

jdbc

Operacje pośrednie

Operacje pośrednie są z natury leniwe (tzn. nie wykonują właściwej operacji, zamiast tego zwracają nowy strumień). Oznacza to zachowanie elementów strumienia początkowego i zawsze zwrócenie nowego strumienia strumienia początkowego. Należy pamiętać, że wykonanie potoku nie rozpoczyna się do czasu wykonania operacji końcowej potoku.

Operacje pośrednie dzielą się dalej na bezpaństwowiec operacje (takie jak filtr i mapa) oraz stanowy operacje (takie jak odrębne i posortowane).

Operacja bezstanowa

Operacje bezstanowe nie zachowują stanu elementów widzianych wcześniej podczas przetwarzania nowego elementu. Każdy element może być przetwarzany niezależnie od operacji na innych elementach.

Operacja stanowa

Operacje stanowe zachowują stan elementów widzianych wcześniej podczas przetwarzania nowych elementów. Właściwość operacji stanowej polega na tym, że przetwarza ona cały sygnał wejściowy przed wygenerowaniem wyniku.

Załóżmy, że wykonujemy operację sortowania na strumieniu i chcemy wygenerować wynik z tego strumienia bez oglądania wszystkich elementów strumienia, co nie jest możliwe. Dlatego dopóki nie zobaczysz wszystkich elementów strumienia, nie możesz uzyskać wyniku. Dlatego przed otrzymaniem wyniku musimy przetworzyć całe dane wejściowe.

Obsługa terminala

Operacje terminalowe przechodzą przez strumień, aby wygenerować wynik lub efekt uboczny. Po wykonaniu operacji terminalowej potok strumieniowy uznaje się za zużyty. Po spożyciu nie nadaje się już do użytku. W przypadku, gdy potrzebujemy przejść przez to samo źródło danych (strumień), zwróć strumień, aby uzyskać nowy strumień.

Prawie wszystkie operacje terminalowe mają charakter chętny. Oznacza to, że przemierzają strumień i przetwarzają rurociąg przed powrotem. Należy pamiętać, że nie jest to dozwolone w przypadku operacji na dwóch terminalach, tj. iterator() i spliterator().

Oprócz powyższych operacji istnieje jeszcze jedna operacja zwana zwarcie operacja. Zarówno operacje pośrednie, jak i końcowe mogą powodować zwarcie.

Jakiś operacja pośrednia powoduje zwarcie, jeśli istnieje strumień o nieskończonym wejściu. W rezultacie może wytworzyć skończony strumień.

A obsługa terminala powoduje zwarcie, jeśli istnieje strumień o nieskończonym wejściu. Może zakończyć się w skończonym czasie.

Zauważamy, że zastosowanie operacji zwarciowej w rurociągu jest niezbędne, ale niewystarczające. Jest to warunek przetworzenia nieskończonego strumienia zakończyć normalne działanie w skończonym czasie.

Java jest pusta

Java 8 Stream.anyMatch()

Zwraca informację, czy jakiekolwiek elementy tego strumienia odpowiadają podanemu predykatowi. Może nie oceniać predykatu dla wszystkich elementów, jeśli nie jest to konieczne do określenia wyniku.

Składnia:

 boolean anyMatch(Predicate predicate) 

Parametry: Akceptuje A nieingerujący I bezpaństwowiec predykat, który ma zostać zastosowany do elementów strumienia wejściowego.

Zwroty: To powraca PRAWDA jeśli jakikolwiek element pasuje do określonego predykatu, w przeciwnym razie zwraca wartość false. Zwraca wartość false, jeśli strumień jest pusty. W przypadku pustego strumienia predykat nie jest oceniany.

Przykład 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); } } 

Wyjście:

 true 

Poniższy przykład ilustruje, że pusty strumień zawsze zwraca wartość false.

AnyMatchExample2.java

po kliknięciu javascript
 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); } } 

Wyjście:

 false 

Zobaczmy inny program Java, w którym przeanalizowaliśmy wiele predykatów.

Aktor Amrita Rao

Aby spełnić wiele warunków, utwórz predykat złożony z dwóch lub więcej prostych predykatów. W podanym przykładzie mamy listę Pracowników. Chcemy sprawdzić, czy jest pracownik, który ma 28 lat i jego nazwisko zaczyna się na literę R. Poniższy program w Javie przedstawia to samo.

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>

Wyjście:

 true true false 

Interfejs Stream zapewnia inną metodę dopasowywania określonego predykatu, tj. wszystkoDopasuj() . Różnica między allMatch() i anyMatch() polega na tym, że funkcja anyMatch() zwraca PRAWDA jeśli którykolwiek z elementów strumienia pasuje do określonego predykatu. Podczas korzystania z funkcji allMatch() wszystkie elementy muszą pasować do podanego predykatu.

Dlatego metodę anyMatch() można zastosować w określonym przypadku, gdy chcemy sprawdzić, czy w strumieniu znajduje się przynajmniej jeden element. Metoda zawiera() klasy List również wykonuje tę samą operację. Zatem zamiast metody anyMatch() możemy także użyć metody zawiera().

Dlatego nie ma różnicy pomiędzy metodami List.contains() i Stream.anyMatch().