在了解函数式接口前,希望大家有一定的lamda表达式的基础,可以参考此博客。本文细说一下java8 常见的函数式接口-Predicate,希望对大家有一定的帮助。
本接口位于java.util.function包中,用的比较多,称之为断言接口,用于条件判断,其中唯一需要实现的方法为test(T t),其实现逻辑通常作为一个参数传到某个方法中。本人觉得可以这样去理解 Predicate,其实例是一个条件,条件是用来判断test(T t)中的参数是否成立,所以最终的关系是“条件.test(t)”。
源码解析
package java.util.function;
import java.util.Objects;
/**
* <p>This is a <a href="package-summary.html">functional interface</a>
* whose functional method is {@link #test(Object)}.
*函数式接口,需要唯一实现的方法是test
* @param <T> the type of the input to the predicate
* java8引入的
* @since 1.8
*/
@FunctionalInterface
public interface Predicate<T> {
/**
*对给定的参数判断其是否符合条件,所以实现test方法就是实现一套判断逻辑
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
/**
* 与操作,可以用&&代替
*
* @param other a predicate that will be logically-ANDed with this
* predicate
* @return a composed predicate that represents the short-circuiting logical
* AND of this predicate and the {@code other} predicate
* @throws NullPointerException if other is null
*/
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
/**
*对给定的条件进行取反操作
* @return a predicate that represents the logical negation of this
* predicate
*/
default Predicate<T> negate() {
return (t) -> !test(t)