常用的函数式接口_Predicate接口_默认方法or&negate和常用的函数式接口_Predicate接口练习_集合信息筛选
常用的函数式接口_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); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix