Stream API는 일부 조건에 따라 시퀀스 요소의 유효성을 검사할 수 있는 편리한 함수들을 제공하는데, anyMatch, allMatch, noneMatch가 그 역할을 한다. 3개의 함수들은 각각 Predicate을 파라미터로 받아 조건에 대한 일치 여부를 내려준다. 또한, 함수의 이름에서 알 수 있듯이, Matching 여부를 판단하지만 그에 따라 다른 결과를 반환하므로 상황에 맞는 함수를 사용해야 한다.
Predicate은 무엇인가?
Predicate은 함수형 인터페이스로, argument를 받아 boolean 값을 반환한다.
Predicate<T>에서 T는 predicate에 들어갈 input의 타입을 의미한다.
ex)
Predicate<Integer> predicate = (num) -> num < 10;
anyMatch
stream의 어떤 한 원소가 제공받은 predicate을 만족하는 지 여부를 반환한다.
- predicate을 만족하는 원소가 존재하는 순간(조건이 true를 반환하는 순간) true를 리턴한다.
- stream의 모든 원소를 돌면서 전부 다 조건을 만족하지 않는다면, false를 리턴한다.
- 만약 stream이 비어있다면 false를 리턴한다.
List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
boolean anyMatchNumberOver3 = nums.stream().anyMatch(n -> {
System.out.print(n + " ");
return n > 3;});
System.out.println("\nAny match number over 3 = " + anyMatchNumberOver3);
boolean anyMatchNumberOver10 = nums.stream().anyMatch(n -> {
System.out.print(n + " ");
return n > 10;});
System.out.println("\nAny match number over 10 = " + anyMatchNumberOver10);
1 2 3 4
Any match number over 3 = true
1 2 3 4 5 6 7 8 9 10
Any match number over 10 = false
allMatch
stream의 모든 원소가 predicate을 만족하는 지 확인한다.
- anyMatch와는 반대로, predicate을 만족하지 않는 원소가 존재하는 순간(조건이 false를 반환하는 순간) false를 리턴한다.
- stream의 모든 원소를 돌며 모든 원소가 조건을 만족한다면 true를 리턴한다.
- 만약 stream이 비어있다면 true를 리턴한다.
List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
boolean allMatchNumberOver9 = nums.stream().allMatch(n -> {
System.out.print(n + " ");
return n > 9;});
System.out.println("\nAll match number over 9 = " + allMatchNumberOver9);
boolean allNumbersOver0 = nums.stream().allMatch(n -> {
System.out.print(n + " ");
return n > 0;});
System.out.println("\nAll match number over 0 = " + allNumbersOver0);
1
All match number over 9 = false
1 2 3 4 5 6 7 8 9 10
All match number over 0 = true
noneMatch
stream의 모든 원소가 predicate을 만족하지 않는지 확인한다.
- stream의 원소가 predicate을 만족하는 순간(조건이 true를 반환하는 순간) false를 리턴한다.
- stream의 모든 원소를 돌면서 전부 다 조건을 만족하지 않는다면, true를 리턴한다.
- 만약 stream이 비어있다면 true를 리턴한다.
- 같은 조건을 넣었을 때 anyMatch와 반대값을 리턴한다.(동일 조건에서 anyMatch가 true라면 noneMatch는 false를, anyMatch가 false라면 noneMatch는 true를 리턴)
List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
boolean noneMatchNumberOver7 = nums.stream().noneMatch(n -> {
System.out.print(n + " ");
return n > 7;});
System.out.println("\nNone match number over 7 = " + noneMatchNumberOver7);
boolean noneMatchNumberOver10 = nums.stream().noneMatch(n -> {
System.out.print(n + " ");
return n > 10;});
System.out.println("\nNone match number over 10 = " + noneMatchNumberOver10);
1 2 3 4 5 6 7 8
None match number over 7 = false
1 2 3 4 5 6 7 8 9 10
None match number over 10 = true
'Java, Kotlin, Spring' 카테고리의 다른 글
[Java/Spring] Resilience4j - Circuit Breaker (3). 적용 (0) | 2023.02.13 |
---|---|
[Java/Spring] Resilience4j - Circuit Breaker (2). 설정 (1) | 2023.02.11 |
[Java/Spring] Resilience4j - Circuit Breaker (1). 정의 (0) | 2023.02.11 |
[Java/Spring] (4) MapStruct - Mapper 세부 설정 (0) | 2023.01.13 |
[Java/Spring] (3) MapStruct - Mapping 필드 정의하기 2 (0) | 2023.01.13 |