1.Predicate接口說明
java.util.function.Predicate<T>接口
作用:對某種數據類型的數據進行判斷,結果返回一個boolean
Predicate接口中包含了一個抽象方法
boolean test(T t);應用該方法對某種數據類型的數據進行判斷,符合條件則返回true,不符合則返回false
默認方法
(1)and();與運算,判斷一個字符串中是否既含有a,又含有b;
源碼:
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
(2)or();或運算
源碼:
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
(3)negate();取反運算
源碼:
default Predicate<T> negate() {
return (t) -> !test(t);
}
案例1:
/*
定義一個方法,參數傳遞String類型的字符串,傳遞一個Predicate接口,泛型使用String
使用該接口中的test方法對字符串進行判斷,並將判斷結果返回
*/
public static boolean checkString(String str, Predicate<String> pre){
return pre.test(str);
}
public static void main(String[] args) {
String str = "AA";
*//*boolean result = checkString(str, new Predicate<String>() {
@Override
public boolean test(String s) {
return s.length()>5;
}
});*/
boolean result = checkString(str,s -> s.length()>5);
System.out.println(result);
}
案例2:
//判斷一個字符串是否既含有a,長度又大於5
public static boolean method(String str, Predicate<String> pre1,Predicate<String> pre2){
//return pre1.test(str) && pre2.test(str);
return pre1.and(pre2).test(str);
}
public static void main(String[] args) {
String str="axwertggwhwt";
/* boolean result = method(str, new Predicate<String>() {
@Override
public boolean test(String s) {
return str.contains("a");
}
},
new Predicate<String>() {
@Override
public boolean test(String s) {
return str.length()>5;
}
});*/
boolean result = method(str,s->str.contains("z"),s->str.length()>5);
System.out.println(result);
}
案例3:
//判斷一個字符串的長度是否大於5,大於返回false,否則返回true
public static boolean method(String str, Predicate<String> pre){
//return !pre.test(str);
return pre.negate().test(str);
}
public static void main(String[] args) {
String str = "AA";
boolean result = method(str,s -> s.length()>5);
System.out.println(result);
}
案例4:
//判斷一個字符串的姓名長度是否大於4,且性別爲女,並將符合條件的字符串存入ArrayList中
public static boolean method(String strs, Predicate<String> pre1, Predicate<String> pre2){
return pre1.and(pre2).test(strs);
}
public static void main(String[] args) {
String[] arrs = {"AAAAA,男","BBBBBB,女","CC,男","DDDDDDD,女"};
ArrayList<String> list = new ArrayList<>();
for (String arr : arrs) {
boolean result = method(arr,s->s.split(",")[0].length()>4,s->s.split(",")[1].equals("女"));
if(result){
list.add(arr);
}
}
System.out.println(list.toString());
}