JDK、guava、Apache都提供Predicate断言类,用法大同小异。
1)相等判断:EqualPredicate
2)非空判断:NotNullPredicate
3)唯一判断:EqualPredicate
4)自定义判断:重写Predicate接口中的evaluate()方法
5)组合式判断:
- PredicateUtils.allPredicate(...) 添加多个Predicate元素, 都为真才为真
- PredicateUtils.andPredicate(...) 添加两个Predicate元素, 两个全为真才为真
- PredicateUtils.anyPredicate(...) 添加多个Predicate元素,任何一为真就为真
public static void main(String[] args) {
Predicate<String> notNull = NotNullPredicate.notNullPredicate();
// 自定义判断:字符串长度大于等于5
Predicate<String> self = new Predicate<String>() {
@Override
public boolean evaluate(String object) {
return object.length() >= 5;
}
};
// 组合两个判断
Predicate<String> pre = PredicateUtils.allPredicate(notNull, self);
List<String> list = PredicatedList.predicatedList(new ArrayList(), pre);
list.add("cdsfds");
// list.add("fds")出错;
// list.add(null);出错
}
// 判断相等
public static void equal() {
Predicate<Integer> equal = EqualPredicate.equalPredicate(2345);
boolean flag = equal.evaluate(123);
boolean flag2 = equal.evaluate(2345);
System.out.println(flag + "\t" + flag2);
// Output:false true
}
// 非空判断
public static void notNull() {
Predicate<String> notNull = NotNullPredicate.notNullPredicate();
List<String> list = PredicatedList.predicatedList(new ArrayList(),
notNull);
list.add("aaa");
list.add("bbb");
// list.add(null);报错
}
// 唯一判断
public static void unique() {
Predicate<String> unique = UniquePredicate.uniquePredicate();
List<String> list = PredicatedList.predicatedList(new ArrayList(),
unique);
list.add("aaa");
list.add("bbb");
// list.add("aaa");报错
}