接口方法
boolean test(T t);:具体的断言操作,需要先生成Predicate对象
default Predicate<T> and(Predicate<? super T> other):调用当前Predicate对象后在调用other的Predicate对象,两者是且的关系,即:&&
default Predicate<T> or(Predicate<? super T> other):调用当前Predicate对象后在调用other的Predicate对象,两者是或的关系,即:||
default Predicate<T> negate():取当前Predicate对象断言后的非操作,即:!
static <T> Predicate<T> isEqual(Object targetRef):静态方法,直接调用,对象相等。返回一个Predicate对象
实际使用如下:
package com.message.demo.fun;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class TestPredicate {
public static void main(String[] args) {
Predicate<Integer> gt = s -> s > 5;
Predicate<Integer> multipleOf_5 = s -> s % 5 == 0;
Predicate<Integer> multipleOf_2 = s -> s % 2 == 0;
Predicate<Integer> lt = s -> s < 5;
System.out.println("10 大于 5: " + gt.test(10));
System.out.println("10 小于 5: " + lt.test(10));
System.out.println("20 大于 5,且是5的倍数: " + gt.and(multipleOf_5).test(20));
System.out.println("8 是 5 或 2 的倍数: " + multipleOf_5.or(multipleOf_2).test(8));
System.out.println("GET 等于 get: " + Predicate.isEqual("get").test("GET"));
System.out.println("取 10 大于5 的反" + gt.negate().test(10));
List<String> list = Arrays.asList("java","js","python","vue","scala");
List<String> stringList = filter(list, s -> s.contains("j") || s.contains("a"));
System.out.println(stringList);
}
public static <T> List<T> filter(List<T> list, Predicate<T> action) {
ArrayList<T> arrayList = new ArrayList<>();
list.forEach(item -> {
if (action.test(item)) {
arrayList.add(item);
}
});
return arrayList;
}
}