Predicate函数式接口:传入一个参数,返回一个boolean值。
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
default Predicate<T> negate() {
return (t) -> !test(t);
}
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
}
Predicate函数式接口可以对多个Predicate做逻辑运算,与,非,或。如下示例:
public class MyTest7 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
MyTest7 test = new MyTest7();
//两个条件组合
Predicate<Integer> predicate1 = i -> i%2 == 0;
Predicate<Integer> predicate2 = i -> i > 5;
test.getAllData(list,predicate1,predicate1);
}
public void getAllData(List<Integer> allList, Predicate<Integer> predicate1,Predicate<Integer> predicate2){
List<Integer> listData = allList.stream().filter(predicate1.and(predicate2)).collect(Collectors.toList());
listData.forEach(i -> System.out.println(i));
}
public void getAllData2(List<Integer> allList, Predicate<Integer> predicate1,Predicate<Integer> predicate2){
List<Integer> listData = allList.stream().filter(predicate1.or(predicate2)).collect(Collectors.toList());
listData.forEach(i -> System.out.println(i));
}
}