Predicate接口练习—集合信息筛选
数组当中有多条“姓名+性别”的信息,
请通过Predicate接口的拼装将符合要求的字符串筛选到集合Arraylist中,
需要同时满足两个条件
1、必须是女生
2、姓名为4个字
分析:
1、有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断
2、必须同时满足两个条件,所以可以使用and方法连接两个判断条件
/* 定义一个方法 方法的参数传递一个包含人员信息的数组 传递两个Predicate接口,用于对数组的信息进行过滤 把满足条件的信息存到ArrayList集合中并返回 */ 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对获取到的字符串进行判断 if (pre1.and(pre2).test(s)){ list.add(s); } } return list; } public static void main(String[] args) { //定义一个存储字符串的数组 String[] arr = {"张三李四,男","王五,男","赵六,女","王五赵六,女"}; //调用filter方法,传递字符串数组和两个Lambda表达式 ArrayList<String> list = filter(arr, (String s)->{ String[] split = s.split(","); //获取字符串中的姓名,判断长度是否为4个字符 return split[0].length()==4; }, (String s)->{ String[] split = s.split(","); //获取字符串中的性别,判断是否为女 return split[1].equals("女"); }); System.out.println(list); }
常用的函数式接口——Function接口
java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据,
前者称为前置条件,后者称为后置条件。
Function接口中最主要的抽象方法为:R apply(T t),根据类型T的参数获取类型R的结果
使用的场景例如:将String类型转换为Integer类型
定义一个方法
方法的参数传递一个字符串类型的整 方法的参数传递一个Function借口而,泛型使用<String,Integer> 使用Function接口中的方法apply,把字符串类型的整数,转换为Integer类型的整数
/* 定义一个方法 方法的参数传递一个字符串类型的整数 方法的参数传递一个Function借口而,泛型使用<String,Integer> 使用Function接口中的方法apply,把字符串类型的整数,转换为Integer类型的整数 */ public static void change(String s, Function<String,Integer> fun){ // Integer in = fun.apply(s); int in = fun.apply(s); System.out.println(in); } public static void main(String[] args) { //定义一个字符串类型的整数 String s = "1234"; //调用change方法,传递字符串类型的整数和Lambda表达式 // change(s,(String str)->{ // //把字符串类型的整数,转换为Integer类型的整数返回 // return Integer.parseInt(str); // }); //优化Lambda表达式 change(s,str->Integer.parseInt(str)); }