반응형
predicate는 조건식을 정의할 때 사용하는 함수형 인터페이스다
연산자의 && (and) , || (or) 와 같이 and(), or() , negate()로 두 Predicate를 하나로 결합(default 메서드) 할 수 있다.
예제 코드
import java.util.function.Predicate;
public class PredicateExam {
public static void main(String[] args) {
//세개의 Predicate 를 구현하였다.
Predicate<Integer> a = i->i<100;
Predicate<Integer> b = i->i<200;
Predicate<Integer> c = i-> i%2 == 0 ;
//negate() 반대로 만든다 i<100 을 i>=100 으로 바꾼다.
//연산자의 !와 같다.
Predicate<Integer> notA = a.negate();
//i>=100 && i<200 || i%2 == 0;
Predicate<Integer> all = notA.and(b).or(c);
//i>=100 && (i<200 || i%2==0)
Predicate<Integer> all2 = notA.and(b.or(c));
//predicate를 수행하기 위해선 predicate의 default메서드인
// test()를 사용해야한다.
//2>=100 false
System.out.println(notA.test(2));
// 20>=100 false && 20<200 true ||20%2 ==0 true
// 최종값 true
System.out.println(all.test(20));
//40>=100(false) && (40<200(true) || 40%2 ==0(true))
//최종값 false
System.out.println(all2.test(40));
}
}
isEquals() String 타입 같이 등가비교 필요할 때 사용
-Predicate의 static 메서드로 isEquals()가 정의되어있다
Predicate<String> p = Predicate.isEqual("abc");
boolean isEqual = p.test("abc");
//true
System.out.println(isEqual);
andThen()을 통한 여러개의 Function<> 인터페이스의 연결
-Funtion<> 타입은 입력값 출력값이 모두 존재하는 함수형인터페이스다 .
-Funtion 인터페이스의 andThen()은 두개의 함수를 연결시켜준다 .
예제코드
import java.util.function.Function;
public class FunctionExam {
public static void main(String[] args) {
//두개의 Funtion 인터페이스를 구현 했다.
//
Function<String,Integer> a = s -> Integer.parseInt(s,16);
Function<Integer,String> b = i -> Integer.toBinaryString(i);
//두개의 Funtion 인터페이스가 andThen으로 합쳐졌다.
Function<String, String> combinedFunction = a.andThen(b);
//apply()로 Funtion 인터페이스를 사용한다.
System.out.println(combinedFunction.apply("a"));
}
}
결과 값은 10의 이진법 표기인 1010이 나온다.
그림으로 그림으로 보면 아래와 같다.
두 Function 이 결합되었다 이런식으로 여러개의 함수를 연결 할 수도 있다
주의할 점은 위의 그림의 a의 리턴타입이 interger고 b의 입력타입이 interger 인 것 처럼 첫번째 함수의 리턴타입이 이어지는 함수의 입력타입과 같아야 한다
반응형
'JAVA' 카테고리의 다른 글
JAVA 스터디 23 - 메서드 참조(method reference) (0) | 2021.03.27 |
---|---|
JAVA 스터디 22 - 컬렉션 프레임웍과 함수형 인터페이스 (0) | 2021.03.27 |
JAVA 스터디 20 - 람다식 (Lamda Expression) (0) | 2021.03.27 |
JAVA 스터디 18 - 애노테이션 (0) | 2021.03.26 |
JAVA 스터디 17 - ENUM (0) | 2021.03.25 |