-
람다와 스트림 - Predicate의 결합백엔드/자바 2021. 9. 1. 15:05
이전 파트에서 설명했듯이 Function 타입의 참조변수끼리는 결합이 가능하다.
그리고 이러한 결합은 Predicate타입의 참조변수끼리도 가능하다.
예를 들어서 위와 같은 메서드가 있다고 가정해보자.
if의 조건을 보면 논리 연산자 &&으로 조건이 이어진 것을 볼 수 있을 것이다.
이러한 논리 연산을 Predicate 간에도 할 수 있다.
and() - &&
예를 들어 위와 같은 코드가 있다고 가정해보자.
Predicate의 참조변수 pr1은 매개변수가 짝수인지 판별하는 람다식을 저장하고 있다.
그리고 참조변수 pr2는 매개변수가 10인지 판별하는 람다식을 저장하고 있다.
이때 참조 변수 pr1을 통해 and() 메서드를 불러와 그 안에 참조변수 pr2를 매개변수로 준다.
그러면 pr1의 조건과 pr2의 조건이 &&(and) 즉 두 조건이 연결되는 기능을 갖게 된다.
그리고 당연히 결과는 짝수인 8만 넣을 경우 위와 같이 false가 나오고 10을 넣어야 true가 나온다.
그 외에 다른 논리 연산자도 Predicate에서 and()와 같은 메서드를 제공해준다.
or() - ||
and() 메서드가 &&의 기능을 가졌다면 or() 메서드는 이름대로 ||(or)의 기능을 가진다.
위의 코드를 보도록 하자.
이전의 and()와 사용법은 동일하다. 참조변수로 or() 메서드를 불러온다.
그리고 매개변수로 다른 참조변수를 넣어주면 두 조건끼리 결합이 가능하다.
그리고 and()와 달리 or()는 두 조건 중 하나만 만족하면 된다.
그래서 8을 test() 메서드에 넣었을 때 pr1 조건에 맞으므로 true가 출력되는 것을 볼 수 있다.
negete() - !
마지막으로 알아볼 negate()는 논리 연산자 !(not)의 기능을 한다.
논리 연산자 !의 경우 조건이 두개가 필요하지 않다.
그래서 and()와 or()와 달리 단독으로 써준다.
위 코드처럼 Predicate 참조변수를 통해서 negate()를 불러오기만 하면 된다.
이때 negate()의 반환 값은 negate()를 불러온 참조 변수의 조건과 반대되는 조건이다.
즉 코드를 기준으로 한다면 pr1의 조건을 반대로 적용한게 negate()의 반환값이다.
그래서 최종적으로 negate()의 조은 !(i%2==0)이 된다.
그래서 10을 test() 메서드에 넣어줄 경우 false가 출력된다.
논리연산자 메서드끼리의 합성
지금까지 이야기했듯이 논리 연산자는 and(), or(), negate() 메서드로 사용가능했다.
그리고 최종적으로는 이 논리 연산자 메서드끼리 결합도 가능하다.
위 코드와 같이 and()와 negate()를 결합하는 등의 조합도 가능하다.
참고로 풀이를 하자면 result의 조건은 !( i%2==0 && i ==0 )이다.
그래서 8을 넣으면 true, 10을 넣으면 false가 출력된다.
'백엔드 > 자바' 카테고리의 다른 글
람다와 스트림 - 메소드 참조(method reference) (0) 2021.09.14 람다와 스트림 - 컬렉션과 함수형 인터페이스 (0) 2021.09.01 람다와 스트림 - 함수의 결합 (0) 2021.08.25 람다와 스트림 - java.util.function - part2 (0) 2021.08.25 람다와 스트림 - java.util.function - part1 (0) 2021.08.24