logo

Java 8의 anyMatch()

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, &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>

산출:

 true true false 

Stream 인터페이스는 지정된 조건자를 일치시키는 또 다른 방법을 제공합니다. 모두 일치() . allMatch()와 anyMatch()의 차이점은 anyMatch()가 반환한다는 것입니다. 진실 스트림의 요소 중 하나라도 지정된 조건자와 일치하는 경우. allMatch()를 사용할 때 모든 요소는 주어진 조건자와 일치해야 합니다.

따라서 스트림에 요소가 하나 이상 있는지 확인하려는 특정 경우에 anyMatch() 메서드를 사용할 수 있습니다. List 클래스의 Contains() 메서드도 동일한 작업을 수행합니다. 따라서 anyMatch() 메서드 대신 Contains() 메서드를 사용할 수도 있습니다.

따라서 List.contains() 메서드와 Stream.anyMatch() 메서드 간에는 차이가 없습니다.