常用的函数式接口_Predicate接口练习_集合信息筛选和Function接口
常用的函数式接口_Predicate接口练习_集合信息筛选
练习:集合信息筛选
数组当中有多条“姓名+姓别”的信息如下
String[] arr = {"张三请,女",“李四考勤,女”,"王五都是,女","赵六事务,男"}
需要同时满足两个条件:
1.必须为女生:
2.姓名为4个字
定义一个方法
方法的参数传递一个包含人员信息的数组
传递两个Predicate接口,用于对数组中的信息进行过滤
把满足条件的信息存到ArrayList集合中并返回
public class Demo05Test { public static void main(String[] args) { String[] arr = {"张三请,女","李四考勤,女","王五都是,女","赵六事务,男"}; //调用filter方法,传递字符串数组和两个Lambda表达式 ArrayList<String> list = filter(arr,(String s)->{ //获取字符串中的性别,判断是否为女 return s.split(",")[1].equals("女"); },(String s)->{ //获取字符串中的姓名,判断长度是否为4个字符 return s.split(",")[0].length()==4; }); for (String s : list) { System.out.println(s); } } public static ArrayList<String> filter(String[] arr, Predicate<String> str1,Predicate<String> str2){ //定义一个Arraylist集合,存储过滤之后的信息 ArrayList<String> list = new ArrayList<>(); //遍历数组 for (String s : arr) { //使用Predicate接口中的方法进行判断 boolean b = str1.and(str2).test(s); if (b){ //条件成立,两个条件都满足,把信息存储到Arraylist集合中 list.add(s); } } return list; } }
常用的函数式接口_Function接口
java.util.function.Function<T,R>接口用来根据一个类的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件。
抽象方法:apply
Function接口中最主要的抽象方法为:R apply(T t),根据类型T的参数获取类型的结果。
将String类型转换为Integer类型。
java.util.function.Function<T,R>接口用来根据一个类型的数据得到另一个类型的数据,
前者称为前置条件,后者称为后置条件。
Function接口中最主要的抽象方法为:R applay(T t),根据类型T的参数获取类型R的结果。
使用的场景例如:将String类型转换为Integer类型。
定义一个方法
方法的参数传递一个字符串类型的整数
方法的参数传递一个Function接口,泛型使用<String,Integer>
使用Function接口中的方法apply,把字符串类型的整数,转换为Integer类型的整数
public class DFunction { public static void main(String[] args) { String s = "1234"; //调用方法,传递字符串类型的整数,和Lambda表达式 change(s,(String str)->{ //把字符串类型的整数,转换为Integer类型的整数返回 return Integer.parseInt(str); }); //优化Lambda change(s,str->Integer.parseInt(str)); } public static void change(String s, Function<String,Integer> fun){ //自动拆箱Internet-->int int in = fun.apply(s); System.out.println(in); } }