Java/스트림(Stream)

[Java]Stream 하나라도 조건을 만족하는지 확인 - anyMatch 메서드

DevStory 2022. 8. 25.

anyMatch 메서드

Stream 클래스에서 제공하는 anyMatch() 메서드는 조건식에 따라 Boolean 타입의 값을 반환합니다.

boolean anyMatch(Predicate<? super T> predicate);

anyMatch 메서드 특징

  • 단락 종료 오퍼레이션(short-circulting terminal operation)입니다. true를 반환하는 경우 더 이상 anyMatch() 메서드를 호출하지 않습니다.
  • 매개변수는 함수형 인터페이스인 Predicate 타입입니다. Predicate 인터페이스는 한 개의 매개변수를 가지며, Boolean 타입의 값을 반환하는 작업을 수행하기 위해 사용됩니다.
  • 스트림이 비어 있는 경우 false를 반환합니다.

예제 1. Integer 타입의 List

다음 예제는 Integer 타입의 List에서 30보다 큰 값이 하나라도 있는지 Stream 클래스의 anyMatch() 메서드로 확인합니다.

public static void main(String args[]) {
  List<Integer> intList = new ArrayList<>(Arrays.asList(10, 20, 30, 40, 50));

  Boolean isThirty = intList.stream().anyMatch(num -> num > 30);

  System.out.println("30보다 큰 요소가 존재하는가? " + isThirty);
}

[실행 결과]

30보다 큰 요소가 존재하는가? true

예제 2. anyMatch 메서드 동작 확인

다음 예제는 첫 번째 예제와 동일합니다. anyMatch() 메서드의 동작 과정을 확인하기 위해 람다 표현식에 스트림 요소의 값을 콘솔에 출력하는 소스 코드를 추가합니다.

public static void main(String args[]) {
  List<Integer> intList = new ArrayList<>(Arrays.asList(10, 20, 30, 40, 50));

  Boolean isThirty = intList.stream().anyMatch(num -> {
    System.out.println("현재 요소는? " + num);
    return num > 30;
  });

  System.out.println("30보다 큰 요소가 존재하는가? " + isThirty);
}

[실행 결과]

현재 요소는? 10
현재 요소는? 20
현재 요소는? 30
현재 요소는? 40
30보다 큰 요소가 존재하는가? true

조건을 만족하는 요소가 단 하나라도 존재하는 경우 anyMatch() 메서드는 true를 반환하고 더 이상 실행되지 않는 것을 확인할 수 있습니다.


예제 3. 문자열의 첫 번째 문자가 대문자인지 확인

다음 예제는 String 타입의 List에서 문자열의 첫 번째 문자가 대문자인지 확인하기 위해 Stream 클래스의 anyMatch() 메서드와 Character 클래스의 isUpperCase() 메서드를 사용합니다.

 

anyMatch() 메서드가 실행되면서 Character.isUpperCase() 메서드가 호출됩니다.

public static void main(String args[]) {
List<String> strList = new ArrayList<>(Arrays.asList("abc", "Abc"));

Boolean isUpper = strList.stream()
        .anyMatch(strValue -> Character.isUpperCase(strValue.charAt(0)));

System.out.println("첫 글자가 대문자인 문자열이 존재하는가? " + isUpper);
}

[실행 결과]

첫 글자가 대문자인 문자열이 존재하는가? true
반응형

댓글