Formoat's Open Blog
함수적 인터페이스 - Predicate 본문
1. Predicate
1) 매개값을 조사해 true / false 형식으로 반환하는 함수적 인터페이스
2) 매개값을 조사하는 testXXX() 메소드를 가지고 있다.
3) 반환타입은 모두 boolean 타입으로 고정 되어 있다.
Interface Name | Abstract Method | Remarks |
Predicate<T> | boolean test(T t) | 객체 T를 조사 |
BiPredicate<T, U> | boolean test(T t, U u) | 객체 T와 U를 비교 조사 |
DoublePredicate | boolean test(double value) | double 값을 조사 |
IntPredicate | boolean test(int value) | int 값을 조사 |
LongPredicate | boolean test(long value) | long 값을 조사 |
<표> Predicate 함수적 인터페이스의 종류
PredicateExample.java
public class PredicateExample {
private static List<Student> list = Arrays.asList(
new Student("홍길동", "남자", 91),
new Student("장성채", "여자", 92),
new Student("감을석", "남자", 96),
new Student("강혜리", "여자", 99)
);
public static double avg(Predicate<Student> predicate) {
int count = 0, sum = 0;
for (Student student : list) {
if (predicate.test(student)) {
count++;
sum += student.getScore();
}
}
return (double)sum/count;
}
public static void main(String[] args) {
double maleAvg = avg(student -> student.getGender().equals("남자"));
System.out.println("남자 평균 점수:" + maleAvg);
double femaleAvg = avg(student -> student.getGender().equals("여자"));
System.out.println("여자 평균 점수:" + femaleAvg);
}
}
// 실행결과 //
----------------------------------------------------
남자 평균 점수:93.5
여자 평균 점수:95.5
2. 정적 메소드
1) isEqual() 정적 메소드
(1) Predicate<T> 함수적 인터페이스가 가지고 있는 정적 메소드로 객체를 비교할 때 사용
(2) 내부적으로 Objects 클래스의 정적 메소드인 equals 메소드를 사용
// 기본문법
Predicate<Object> predicate = Predicate.isEqual(targetObject);
boolean result = pridicate.test(sourceObject);
sourceObject | targetObject | return |
null | null | true |
not null | null | false |
null | not null | false |
not null | not null | true |
<표> Objects.equals(sourceObject, targetObject)의 반환값
IsEqualExample.java
public class IsEqualExample {
public static void main(String[] args) {
Predicate<String> pdc;
pdc = Predicate.isEqual(null);
System.out.println("null, null : " + pdc.test(null));
pdc = Predicate.isEqual("Java");
System.out.println("null, Java : " + pdc.test(null));
pdc = Predicate.isEqual("Temp");
System.out.println("Java, Temp : " + pdc.test("Java"));
pdc = Predicate.isEqual("Java");
System.out.println("Java, Java : " + pdc.test("Java"));
}
}
// 실행결과 //
----------------------------------------------------
null, null : true
null, Java : false
Java, Temp : false
Java, Java : true
'Java > Java Basic' 카테고리의 다른 글
컬렉션 - List (0) | 2019.09.04 |
---|---|
컬렉션 프레임워크 (Collection Framework) (0) | 2019.09.03 |
함수적 인터페이스 - Operator (0) | 2019.09.03 |
함수적 인터페이스 - Function (0) | 2019.09.03 |
함수적 인터페이스 - Supplier (0) | 2019.09.03 |
Comments