Java 8에서 anyMatch()는 Stream 인터페이스에 정의된 메서드입니다. 이는 다음을 수행합니다. 단락 터미널 작동. 이 섹션에서는 Java 8 Stream의 anyMatch() 메소드 예를 들어. 본론으로 넘어가기 전에 먼저 중간 및 단말 동작에 대해 자세히 이해하겠습니다.
Java 8 스트림에서 스트림 작업은 다음과 같이 나뉩니다. 중급 (Stream.filter, Stream.map 등) 및 단말기 (예: Stream.forEach, Steam.reduce) 작업. 원하는 결과를 얻으려면 스트림 파이프라인을 형성하는 이러한 작업을 결합해야 합니다.
중간 작업
중간 작업은 본질적으로 게으르다(실제 작업을 수행하지 않고 대신 새 스트림을 반환함을 의미함). 이는 초기 스트림의 요소를 유지하고 항상 초기 스트림의 새 스트림을 반환한다는 것을 의미합니다. 파이프라인의 터미널 작업이 실행될 때까지 파이프라인의 실행은 시작되지 않습니다.
중간 작업은 다음과 같이 더 세분화됩니다. 무국적 작업(예: 필터 및 맵) 및 상태 저장 작업(예: 구별 및 정렬).
무상태 운영
상태 비저장 작업은 새 요소를 처리하는 동안 이전에 표시된 요소의 상태를 유지하지 않습니다. 각 요소는 다른 요소에 대한 작업과 독립적으로 처리될 수 있습니다.
상태 저장 작업
상태 저장 작업은 새 요소를 처리하는 동안 이전에 표시된 요소의 상태를 유지합니다. 상태 저장 작업의 속성은 결과를 생성하기 전에 전체 입력을 처리한다는 것입니다.
스트림에 대해 정렬 작업을 수행하고 있으며 스트림의 모든 요소를 확인하지 않고 해당 스트림에서 결과를 생성하려고 한다고 가정해 보겠습니다. 따라서 스트림의 모든 요소를 볼 수 없을 때까지는 결과를 생성할 수 없습니다. 따라서 결과를 생성하기 전에 전체 입력을 처리해야 합니다.
터미널 운영
터미널 작업은 스트림을 통과하여 결과나 부작용을 생성합니다. 터미널 작업이 실행되자마자 스트림 파이프라인이 소비된 것으로 간주됩니다. 소비 후에는 더 이상 사용할 수 없습니다. 동일한 데이터 소스(스트림)를 순회해야 하는 경우 스트림을 반환하여 새 스트림을 얻습니다.
거의 모든 터미널 작업은 본질적으로 열정적입니다. 즉, 스트림을 통과하고 돌아오기 전에 파이프라인을 처리한다는 의미입니다. iterator() 및 Spliterator()와 같은 2단자 작업에서는 허용되지 않습니다.
위의 작업 외에도 다음과 같은 또 다른 작업이 있습니다. 단락 작업. 중간 및 터미널 작업 모두 단락될 수 있습니다.
안 중간 작업 입력이 무한한 스트림이 있으면 단락됩니다. 결과적으로 유한한 스트림이 생성될 수 있습니다.
ㅏ 터미널 운영 입력이 무한한 스트림이 있으면 단락됩니다. 제한된 시간 내에 종료될 수 있습니다.
우리는 파이프라인에서 단락 작업을 사용하는 것이 필수적이지만 충분하지는 않다는 것을 관찰했습니다. 무한 스트림을 처리하기 위해서는 조건이 있다. 유한한 시간 내에 정상적으로 작동을 종료합니다.
라텍스 부분 파생물
자바 8 Stream.anyMatch()
이 스트림의 요소가 제공된 조건자와 일치하는지 여부를 반환합니다. 결과를 결정하는 데 필요하지 않은 경우 모든 요소에 대한 조건자를 평가하지 않을 수도 있습니다.
통사론:
boolean anyMatch(Predicate predicate)
매개변수: 그것은 받아들인다 방해하지 않는 그리고 무국적 입력 스트림의 요소에 적용되는 조건자입니다.
보고: 그것은 반환 진실 요소가 지정된 조건자와 일치하면 그렇지 않으면 false를 반환합니다. 스트림이 비어 있으면 false를 반환합니다. 빈 스트림의 경우 조건자는 평가되지 않습니다.
자바 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); } }
산출:
true
다음 예에서는 빈 스트림이 항상 false를 반환하는 것을 보여줍니다.
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); } }
산출:
false
여러 조건자를 구문 분석한 또 다른 Java 프로그램을 살펴보겠습니다.
여러 조건을 충족하려면 두 개 이상의 단순 조건자로 구성된 조건자를 만듭니다. 주어진 예에는 직원 목록이 있습니다. 나이가 28세이고 이름이 알파벳 R로 시작하는 직원이 있는지 확인하고 싶습니다. 다음 Java 프로그램도 마찬가지입니다.
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>
산출:
true true false
Stream 인터페이스는 지정된 조건자를 일치시키는 또 다른 방법을 제공합니다. 모두 일치() . allMatch()와 anyMatch()의 차이점은 anyMatch()가 반환한다는 것입니다. 진실 스트림의 요소 중 하나라도 지정된 조건자와 일치하는 경우. allMatch()를 사용할 때 모든 요소는 주어진 조건자와 일치해야 합니다.
따라서 스트림에 요소가 하나 이상 있는지 확인하려는 특정 경우에 anyMatch() 메서드를 사용할 수 있습니다. List 클래스의 Contains() 메서드도 동일한 작업을 수행합니다. 따라서 anyMatch() 메서드 대신 Contains() 메서드를 사용할 수도 있습니다.
따라서 List.contains() 메서드와 Stream.anyMatch() 메서드 간에는 차이가 없습니다.