案例:
package JDK8.Xin;
import java.util.ArrayList;
import java.util.function.Predicate;
/*
练习:集合信息筛选。
数组当有多个"姓名+性别"的信息如下。
String[] array = {"易烊千玺,男","黄渤,男","舒淇,女","管虎,男","刘亦菲,女"};
请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,
须同时满足两个条件:
1.必须为男生。
2.姓名为两个字。
分析:
1.有两个判断条件,所有需要使用Predicate接口,对条件进行判断
2.必须同时满足两个条件,所有可以使用and方法连接两个判断条件
*/
public class Demo04Predicate {
/*
定义一个方法
方法的参数传递包含人员信息的数组
传递两个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 s)->{
//获取字符串中的性别,判断是否为男生
return s.split(",")[1].equals("男");
},(String s)->{
//获取字符串中的姓名,判断长度是否为4个数字
return s.split(",")[0].length()==2;
});
//遍历集合
for (String s : list) {
System.out.println(s);
}
}
}
运行结果:
黄渤,男
管虎,男