常用的函数式接口_Predicate接口_默认方法or&negate:
需求:判断一个字符串长度是否大于5
如果字符串的长度大于5,那么返回false
如果字符串的长度不大于5,那么返回true
所以我们可以使用取反符号!对判断的结果进行取反
Predicate接口中有一个方法negate,也表示取反的意思
default Predicate<T> negate(){
return(t) -> !test(t);
}
/* 定义一个方法,方法的参数,传递一个字符串 使用Predicate接口判断字符串的长度是否大于5 */ public static boolean checkString(String s, Predicate<String> pre){ // return !pre.test(s); return pre.negate().test(s);//等效于return !pre.test(s); } public static void main(String[] args) { //定义一个字符串 String s = "abc111"; //调用checkString方法,参数传递字符串和Lambda表达式 boolean b = checkString(s,(String str)->{ //判断字符串的长度是否大于5,并返回结果 return str.length()>5; }); System.out.println(b); }
常用的函数式接口_Predicate接口练习_集合信息筛选:
练习:集合信息筛选
数组当中有多余“名字”+“职业”的信息如下,
String[] array = {"永恩,战士","破败之王,刺客","卡莎,射手"};
请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,
需要同时满足两个条件:
1.必须为刺客
2.名字为4个字
分析:
1.有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断
2.必须同时满足两个条件,所以可以使用and方法连续两个判断条件
public static ArrayList<String> filter(String[] arr, Predicate<String> pre1,Predicate<String> pre2){ //定义一个ArrayList集合,存储过滤之后的信息 ArrayList<String> list = new ArrayList<>(); //遍历数组,获取数组中的每一条信息 for (String s : arr){ //使用Predicate接口中的方法test对获取到的字符串进行判段 boolean b = pre1.and(pre2).test(s); //对得到的布尔值进行判段 if (b){ //条件成立,两个条件都满足,把信息存储到ArrayList集合中 list.add(s); } } //把集合返回 return list; } public static void main(String[] args) { //定义一个存储字符串的数组 String[] array = {"永恩,战士","破败之王,刺客","卡莎,射手"}; //调用字符串的职业,判段是否为刺客 ArrayList<String> list = filter(array,(String s)->{ //获取字符串中的职业,判断是否为刺客 return s.split(",")[1].equals("刺客"); },(String s)->{ //获取字符串中的名字,判段是否为4个字符 return s.split(",")[0].length()==4; }); //遍历集合 for (String s : list){ System.out.println(s); }
标签:Predicate,return,函数,ArrayList,接口,字符串,String From: https://www.cnblogs.com/hungui/p/16733559.html