常用的函数式接口_Predicate接口练习_集合信息筛选与常用的函数式接口_Function接口
练习:集合信息筛选
题目:数组当中有多条“姓名+性别”的信息如下,请通过Predicate 接口的拼装将符合要求的字符串筛选到集合ArrayList 中,
需要同时满足两个条件:
1.必须为女生;
2. 姓名为4个字。
题目分析:
-
有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断
-
必须同时满足两个条件,所以可以使用and方法连接两个判断条件
解答:
1 package day01.Demo01_Day016; 2 3 import java.util.ArrayList; 4 import java.util.function.Predicate; 5 6 /* 7 练习:集合信息筛选 8 数组当中有多条“姓名+性别”的信息如下, 9 String[] array = { "迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男", "赵丽颖,女" }; 10 请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中, 11 需要同时满足两个条件: 12 1. 必须为女生; 13 2. 姓名为4个字。 14 分析: 15 1.有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断 16 2.必须同时满足两个条件,所以可以使用and方法连接两个判断条件 17 */ 18 public class Demo05Test { 19 /* 20 定义一个方法 21 方法的参数传递一个包含人员信息的数组 22 传递两个Predicate接口,用于对数组中的信息进行过滤 23 把满足条件的信息存到ArrayList集合中并返回 24 */ 25 public static ArrayList<String> filter(String[] arr,Predicate<String> pre1,Predicate<String> pre2){ 26 //定义一个ArrayList集合,存储过滤之后的信息 27 ArrayList<String> list = new ArrayList<>(); 28 //遍历数组,获取数组中的每一条信息 29 for (String s : arr) { 30 //使用Predicate接口中的方法test对获取到的字符串进行判断 31 boolean b = pre1.and(pre2).test(s); 32 //对得到的布尔值进行判断 33 if(b){ 34 //条件成立,两个条件都满足,把信息存储到ArrayList集合中 35 list.add(s); 36 } 37 } 38 //把集合返回 39 return list; 40 } 41 42 public static void main(String[] args) { 43 //定义一个储存字符串的数组 44 String[] array = { "神宫千夏,女", "莫德凯撒,男", "马尔扎哈,男", "赵丽颖,女" }; 45 //调用filter方法,传递字符串数组和两个Lambda表达式 46 ArrayList<String> list = filter(array,(String s)->{ 47 //获取字符串中的性别,判断是否为女 48 return s.split(",")[1].equals("男"); 49 },(String s)->{ 50 //获取字符串中的姓名,判断长度是否为4个字符 51 return s.split(",")[0].length()==4; 52 }); 53 //遍历集合 54 for (String s : list) { 55 System.out.println(s); 56 } 57 } 58 }
常用的函数式接口_Function接口
java.util.function.Function<T,R>接口用来根据一个类型数据得到另一个数据类型的数据
前者称为前置条件,后者称为后置条件
抽象方法:apply
Function接口中的主要抽象方法为:R apply(T t)根据类型T的参数获取类型R的结果
使用场景:如String类型转换Integer类型
1 package day01.Demo01_Day016; 2 3 import java.util.function.Function; 4 5 /* 6 java.util.function.Function<T,R>接口用来根据一个类型数据得到另一个数据类型的数据 7 前者称为前置条件,后者称为后置条件 8 Function接口中的主要抽象方法为:R apply(T t)根据类型T的参数获取类型R的结果 9 使用场景:如String类型转换Integer类型 10 */ 11 public class Demo01Function { 12 /* 13 定义一个方法 14 方法的参数传递一个字符串类型的整数 15 方法的参数传递一个Function接口,泛型使用<String,Integer> 16 使用Function接口中的方法apply,把字符串类型的整数,转换为Integer类型的数据 17 */ 18 public static void change(String s, Function<String,Integer> fun){ 19 int in =fun.apply(s); //自动拆箱 Integer----->int; 20 System.out.println(in); 21 } 22 23 public static void main(String[] args) { 24 //定义一个字符串类型的整数 25 String s ="123"; 26 //调用change方法,传递字符串类型的整数,和Lambda表达式 27 change(s,(String str)->{ 28 //把字符串类型的整数,转换为Integer类型的数据 29 return Integer.parseInt(str); 30 }); 31 //优化Lambda 32 change(s,str->Integer.parseInt(str)); 33 } 34 }