常用的函数式接口_Predicate接口练习_集合信息筛选与常用的函数式接口_Function接口

练习:集合信息筛选

  题目:数组当中有多条“姓名+性别”的信息如下,请通过Predicate 接口的拼装将符合要求的字符串筛选到集合ArrayList 中,

  需要同时满足两个条件:

    1.必须为女生;

    2. 姓名为4个字。

  题目分析: 

    1. 有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断
    2. 必须同时满足两个条件,所以可以使用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 }

 

posted @ 2022-10-11 13:25  zj勇敢飞,xx永相随  阅读(25)  评论(0编辑  收藏  举报