有时候需要对某种类型的数据进行判断,从而得到一个boolean值结果,这是可以使用java,util.function.Predicate<T>接口
作用:
对某种数据类型的数据进行判断,返回一个boolean值
抽象方法:
boolean test(T t):符合条件,返回true
public class Demo {
public static void main(String[] args) {
String s="abcdse";
System.out.println(checkString(s,(m)->m.length()>5));
}
public static boolean checkString(String s, Predicate<String>pre) {
return pre.test(s);
}
}
默认方法:
and
将两个Predicate条件用“与”逻辑连接起来实现“并且”的效果时,可以使用default方法and
例:有两个条件:长度>5并且包含a
未使用and
public class Demo {
public static void main(String[] args) {
String s="abcdse";
System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
}
public static boolean checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
return pre1.test(s)&&pre2.test(s);
}
}
使用and
public class Demo {
public static void main(String[] args) {
String s="abcdse";
System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
}
public static boolean checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
return pre1.and(pre2).test(s);
}
}
or
与and类似,默认方法or实现逻辑关系中的或
public class Demo {
public static void main(String[] args) {
String s="abcdse";
System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
}
public static boolean checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
return pre1.or(pre2).test(s);
}
}
negate:
取反
public class Demo {
public static void main(String[] args) {
String s="abcdse";
System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
}
public static boolean checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
return pre1.or(pre2).test(s);
}
}
习题:集合信息筛选
数组中有“姓名+性别”的信息,筛选条件:(1)女(2)名字两字
public class Demo {
public static void main(String[] args) {
String[]arr={"张三,男","王恰为,女","李四,女"};
ArrayList<String>alist=fliter(arr,(m)->m.split(",")[0].length()==2,(m)->m.split(",")[1].equals("女"));
for(String s:alist){
System.out.println(s);
}
}
public static ArrayList<String>fliter(String[]s, Predicate<String>pre1,Predicate<String>pre2) {
ArrayList<String>list=new ArrayList<>();
for(String m:s){
if(pre1.and(pre2).test(m)){
list.add(m);
}
}
return list;
}
}