常用的函数式接口之Predicate接口
Predicate
boolean test(T t):对给定的参数进行判断(判断逻辑由Lambda表达式实现),返回一个布尔值
default Predicate
default Predicate
default Predicate
Predicate
test、negate方法Demo
package Demo0512;
?
import java.util.function.Predicate;
?
public class PredicateDemo {
public static void main(String[] args) {
//调用方法判断,具体判断逻辑由Lambda表达式实现
boolean b = cheakString("最美不过姑娘你", s -> s.length() > 5);
System.out.println(b);
boolean b1 = cheakString("最美不过姑娘你", s -> s.length() > 10);
System.out.println(b1);
?
}
//定义一个方法用于判断给定的字符串是否符合要求
private static boolean cheakString(String s, Predicatepc){
//返回正常的结果
//return pc.test(s);
//返回相反的结果
return pc.negate().test(s);
}
}
default Predicate
default Predicate
Demo
package Demo0512;
?
import java.util.function.Predicate;
?
public class PredicateDemo01 {
public static void main(String[] args) {
//调用方法
boolean b = cheakString("最美不过姑娘你", s -> s.length() > 5, s -> s.length() > 15);
System.out.println(b);
?
?
?
}
//定义一个方法,实现同一个字符串给出两个不同的判断条件,最后把这两个条件的结果进行逻辑与、逻辑或操作并作为最终结果
private static boolean cheakString(String s, Predicatepc,Predicatepc1){
// return pc.and(pc1).test(s);//进行逻辑与操作,一假全假
return pc.or(pc1).test(s);//进行逻辑与操作,一真为真
}
}
练习:
需求:
1.定义一个字符串数组String [] name={};
2.通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,并遍历
3.字符串需要同时满足两个条件:姓名长度>2,年龄大于20
package Demo0512;
?
import java.util.ArrayList;
import java.util.function.Predicate;
?
public class PredicateDemo02 {
public static void main(String[] args) {
//定义一个数组
String[]strarray={"张三疯,45","李四疯,21","王五,19"};
//调用方法
ArrayList array = myFilter(strarray, s -> s.split(",")[0].length() > 2, s -> Integer.parseInt(s.split(",")[1]) > 20);
//遍历数组
for (String s:array){
System.out.println(s);
}
}
//定义一个方法,通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中
private static ArrayListmyFilter( String[]strarray, Predicatepc,Predicatepc1){
//定义一个数组
ArrayListarray=new ArrayList();
//遍历数组
for (String str:strarray){
if (pc.and(pc1).test(str)){
array.add(str);
}
}
return array;
}
}