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)); } }