Predicate接口
Predicate在英文中的意思:断言。也就是对事物下判断。
抽象方法:test
// 对指定类型的数据var1使用自定义的方式判定
boolean test(T var1);
其实Predicate就是将条件语句打包成一个类,减少编程时传参的麻烦,同时使得条件语句也可以延迟执行。
代码样例
public class Main {
public static void main(String[] args) {
int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
test(arr, (t) -> {
if (t > 12523) return true;
return false;
});
}
public static void test(int arr[], Predicate<Integer> pre) {
for (int s : arr) {
// 用pre.test(s)来代替条件语句
if (pre.test(s)) {
System.out.println(s);
}
}
}
}
输出结果
16254
3547345
default方法:and
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> {
return this.test(t) && other.test(t);
};
}
将当前断言与传入的断言通过短路与拼接并且生成新的断言
代码样例
public static void main(String[] args) {
int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
Predicate<Integer> pre1 = (t) -> {
if (t > 12523) return true;
return false;
};
Predicate<Integer> pre2 = (t) -> {
if (t < 300000) return true;
return false;
};
// 等价于 t > 12523 && t < 300000 的条件
test(arr, pre1.and(pre2));
}
public static void test(int arr[], Predicate<Integer> pre) {
for (int s : arr) {
if (pre.test(s)) {
System.out.println(s);
}
}
}
输出结果
16254
default方法:or
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> {
return this.test(t) || other.test(t);
};
}
将当前断言与传入的断言通过短路或拼接并且生成新的断言
代码样例
public static void main(String[] args) {
int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
Predicate<Integer> pre1 = (t) -> {
if (t > 12523) return true;
return false;
};
Predicate<Integer> pre2 = (t) -> {
if (t < 300000) return true;
return false;
};
// 等价于 t > 12523 && t < 300000 的条件
test(arr, pre1.or(pre2));
}
public static void test(int arr[], Predicate<Integer> pre) {
for (int s : arr) {
if (pre.test(s)) {
System.out.println(s);
}
}
}
输出结果
1
23
135
534
6245
16254
3547345
default方法:negate
default Predicate<T> negate() {
return (t) -> {
return !this.test(t);
};
}
将当前断言取反并且生成新的断言
代码样例
public static void main(String[] args) {
int arr[] = {1, 23, 135, 534, 6245, 16254, 3547345};
Predicate<Integer> pre1 = (t) -> {
if (t < 12523) return true;
return false;
};
Predicate<Integer> pre2 = (t) -> {
if (t > 300000) return true;
return false;
};
// 等价于 t > 12523 && t < 300000 的条件
test(arr, pre1.or(pre2).negate());
}
public static void test(int arr[], Predicate<Integer> pre) {
for (int s : arr) {
if (pre.test(s)) {
System.out.println(s);
}
}
}
输出结果
16254
static方法
static <T> Predicate<T> isEqual(Object targetRef) {
return null == targetRef ? Objects::isNull : (object) -> {
return targetRef.equals(object);
};
}
static <T> Predicate<T> not(Predicate<? super T> target) {
Objects.requireNonNull(target);
return target.negate();
}
- isEqual:传入一个对象,当对象引用null时,返回isNull方法引用的Predicate,否则返回equals的Predicate
- not:返回目标Predicate的negate