默認方法:and
既然是條件判斷,就會存在與、或、非三種常見的邏輯關係。其中將兩個Predicate 條件使用“與”邏輯連接起來實現“並且”的效果時,可以使用default方法and 。其JDK源碼爲:
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) ‐> test(t) && other.test(t);
}
package com.learn.demo06.Predicate;
import java.util.function.Predicate;
/*
邏輯表達式:可以連接多個判斷的條件
&&:與運算符,有false則false
||:或運算符,有true則true
!:非(取反)運算符,非真則假,非假則真
需求:判斷一個字符串,有兩個判斷的條件
1.判斷字符串的長度是否大於5
2.判斷字符串中是否包含a
兩個條件必須同時滿足,我們就可以使用&&運算符連接兩個條件
Predicate接口中有一個方法and,表示並且關係,也可以用於連接兩個判斷條件
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> this.test(t) && other.test(t);
}
方法內部的兩個判斷條件,也是使用&&運算符連接起來的
*/
public class Demo02Predicate_and {
/*
定義一個方法,方法的參數,傳遞一個字符串
傳遞兩個Predicate接口
一個用於判斷字符串的長度是否大於5
一個用於判斷字符串中是否包含a
兩個條件必須同時滿足
*/
public static boolean checkString(String s, Predicate<String> pre1,Predicate<String> pre2){
//return pre1.test(s) && pre2.test(s);
return pre1.and(pre2).test(s);//等價於return pre1.test(s) && pre2.test(s);
}
public static void main(String[] args) {
//定義一個字符串
String s = "abcdef";
//調用checkString方法,參數傳遞字符串和兩個Lambda表達式
boolean b = checkString(s,(String str)->{
//判斷字符串的長度是否大於5
return str.length()>5;
},(String str)->{
//判斷字符串中是否包含a
return str.contains("a");
});
System.out.println(b);
}
}