Java练习>Predicate接口>>集合信息筛选

案例:

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

运行结果:

黄渤,男
管虎,男

 

上一篇:c – std :: greater()和std :: greater之间的区别?


下一篇:使用predicate和Action委托查询