练习:常用的函数式接口Predicate接口。集合的信息筛选
package com.chunzhi.Test06Predicate; import java.util.ArrayList; import java.util.function.Predicate; /* 练习:集合信息筛选 数组当中有多条”姓名+性别“的信息如下, String[] array = {"迪丽热巴,女", "古力娜扎,女", "玛尔扎哈,男", "赵丽颖,女"}; 请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中, 需要同时符合两个条件: 1.必须为女生 2.姓名为4个字。 */ public class Test05 { /* 定义一个方法 方法的参数传递一个包含人员信息的数组 传递两个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对获取到的字符串进行判断 boolean b = pre1.and(pre2).test(s); if (b) { // 条件成立,两个条件都满足,把信息存储到ArrayList集合中 list.add(s); } } // 把集合返回 return list; } public static void main(String[] args) { // 定义一个储存字符串的数组 String[] array = {"迪丽热巴,女", "古力娜扎,女", "玛尔扎哈,男", "赵丽颖,女"}; // 使用filter方法,传递字符串数组和两个Lambda表达式 ArrayList<String> list = filter(array, (String str) -> { // 用","切割字符串,判断性别是否为女 return str.split(",")[1].equals("女"); }, (String str) -> { // 用","切割字符串,判断长度是否为4个字符 return str.split(",")[0].length() == 4; }); // 增强for循环,获取数组中每一条信息 for (String s : list) { System.out.println(s); } } }