docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Predicate.html
자바에서 제공되는 함수형 인터페이스 중에 하나로 boolean 값을 반환합니다.
추상 메소드로 제공되는 test()와 기본 메소드로 제공되는 and(),or(),negate() 가 있으며
스태틱 메소드로 제공되는 isEqual(), not() 가 있습니다.
Predicate<Integer> isOdd = (s) -> (s % 2) == 1;
Predicate<Integer> isEven = Predicate.not(isOdd);
//Predicate<Integer> isEven = isOdd.negate();
Scanner sc = new Scanner(System.in);
System.out.print("숫자를 입력하세요.");
if(sc.hasNextInt()){
int num = sc.nextInt();
if(isOdd.test(num)){
System.out.println("홀수 입니다.");
}else if(isEven.test(num)){
System.out.println("짝수 입니다.");
}
}else{
System.out.print("숫자가 아닙니다.");
}
1. test()는 boolean형으로 반환 합니다.
isOdd는 s 파라미터를 받아서 2로 나누어 나머지가 1인 경우 true, 아닌경우 false를 반환합니다.
if(isOdd.test(num)) 을 보시게 되면 num으로 입력되는 값이 홀수라면 홀수를 출력하게 됩니다.
2. isEven은 Predicate.not() 메소드를 사용해서 isOdd의 반대되는 기능을 수행합니다.
그러니 홀수 의 반대인 짝수의 숫자가 들어오면 true 아니면 false를 반환합니다.
not()는 isOdd에 반대되는 경우를 수행합니다.
같은 기능으로
3. negate() 는 isOdd의 true , false인 논리적인 값을 부정으로 나타냅니다.
List<Integer> a = Arrays.asList(1,3,5,7);
List<Integer> b = Arrays.asList(2,4,6,8);
Predicate<List<Integer>> c = Predicate.isEqual(a);
System.out.println(c.test(b));
4. isEqual()
List a, b 가 있습니다.
위 코드는 b라는 리스트가 a와 같은지를 반환합니다.
Predicate<Integer> p1 = n -> n % 3 == 0;
Predicate<Integer> p2 = n -> n % 6 == 0;
int num = 30;
int num1 = 3;
Predicate<Integer> p3 = p1.and(p2);
Predicate<Integer> p4 = p1.or(p2);
if(p3.test(num)){
System.out.println("3,6 공배수");
}
if(p4.test(num1)){
System.out.println("3 이나 6의 배수입니다.");
}
마지막으로 and() 와 or() 에 대해 알아보겠습니다.
p1은 n을 받아 3으로 나누어 0 이면 true를 반환합니다.
p2는 n을 받아 6으로 나누어 0이면 true를 반환합니다.
5. p3은 p1.and(p2)
6. p4는 p1.or(p2)
p1이 p2에 대해서 and와 or 연산을 합니다.
5-1. p3.test(num) 은 num은 30입니다.
30은 p1의 % 3 했을 경우 0이며, p2의 % 6 을 했을 경우 에도 0이므로
둘다 true를 반환합니다.
p3는 and이므로 둘다 true이니 "3,6 공배수"를 출력합니다.
6-1 p4.test(num1) 은 num1 이 3입니다.
3은 p1의 true를 반환받고, p2는 false를 반환 받습니다.
p4는 or 이므로 둘 중 하나만 true여서 성립합니다.
따라서 "3 이나 6의 배수입니다." 를 출력합니다.
'Back-End > JAVA' 카테고리의 다른 글
aws s3 오브젝트 스토리지 http 오류 (0) | 2024.11.13 |
---|---|
Stream() 의 특징과 기본적인 내용 (0) | 2021.04.29 |
자바8 Function<T,R> interface (0) | 2021.04.26 |
자바8 - 인터페이스의 기본 메소드와 스태틱 메소드 (0) | 2021.04.08 |
자바 indexOf() - 문자열 중 해당문자 위치 찾기 (0) | 2021.04.07 |