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);
}
}
}