JAVA8 Predicate接口

predicate

英 [ˈpredɪkət]   美 ['predɪkət]  
vt.
断言,断定;宣布,宣讲;使基于
vi.
断言,断定
n.
谓语;述语
adj.

谓语的;述语的

上述可以看到,predicate是谓语的意思,在接口中,可以用作判断使用;我们先看接口的定义

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

接口中包含有一个抽象方法,3个默认方法以及一个静态方法

我们先来看抽象方法test()的使用;

public static void main(String[] args) {
		// 数字类型 判断值是否大于5
		Predicate<Integer> predicate = x -> x > 5;
		System.out.println(predicate.test(10));//true

		// 字符串的非空判断
		Predicate<String> predicateStr = x -> null == x && "".equals(x);
		System.out.println(predicateStr.test(""));//false

	}

接下来,我们再看下默认方法的一些使用

/**
	 * 这个默认方法,看代码就知道,判断条件的连接 与操作
	 * @param other
	 * @return
	 */
	default Predicate<T> and(Predicate<? super T> other) {
		Objects.requireNonNull(other);
		return (t) -> test(t) && other.test(t);
	}
	/**
	 * 这个方法,表示取非操作
	 * @return
	 */
	default Predicate<T> negate() {
		return (t) -> !test(t);
	}
	/**
	 * 或操作
	 * @param other
	 * @return
	 */
	default Predicate<T> or(Predicate<? super T> other) {
		Objects.requireNonNull(other);
		return (t) -> test(t) || other.test(t);
	}
	/**
	 * 比较
	 * @param targetRef
	 * @return
	 */
	static <T> Predicate<T> isEqual(Object targetRef) {
		return (null == targetRef) ? Objects::isNull : object -> targetRef.equals(object);
	}
我就不在每个写测试代码,看代码的字面意义,以及代码的写法,就很清楚这些默认方法以及静态方法的用法了

猜你喜欢

转载自blog.csdn.net/qq_28410283/article/details/80601495