天天看點

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(""));//true

	}
           

接下來,我們再看下預設方法的一些使用

/**
	 * 這個預設方法,看代碼就知道,判斷條件的連接配接 與操作
	 * @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);
	}
           

我就不在每個寫測試代碼,看代碼的字面意義,以及代碼的寫法,就很清楚這些預設方法以及靜态方法的用法了

1.lambda表達式

《java8 Lambda表達式簡介》

《java8 lambda表達式,方法的引用以及構造器的引用》

2.函數式接口

《java8 函數式接口簡介》

《JAVA8 Function接口以及同類型的特化的接口》

《JAVA8 Consumer接口》

《JAVA8 Supplier接口》

《JAVA8 UnaryOperator接口》

《JAVA8 BiConsumer 接口》

3.stream接口操作

《java8 Stream接口簡介》

《 java8 Stream-建立流的幾種方式》

《JAVA8 stream接口 中間操作和終端操作》

《JAVA8 Stream接口,map操作,filter操作,flatMap操作》

《JAVA8 stream接口 distinct,sorted,peek,limit,skip》

《java8 stream接口 終端操作 forEachOrdered和forEach》

《java8 stream接口 終端操作 toArray操作》

《java8 stream接口 終端操作 min,max,findFirst,findAny操作》

《java8 stream接口終端操作 count,anyMatch,allMatch,noneMatch》

《java8 srteam接口終端操作reduce操作》

《java8 stream接口 終端操作 collect操作》

4.其他部分

《java8 Optional靜态類簡介,以及用法》