首页 > 其他分享 >常用的函数式接口_Predicate接口_默认方法or&negate和常用的函数式接口_Predicate接口练习_集合信息筛选

常用的函数式接口_Predicate接口_默认方法or&negate和常用的函数式接口_Predicate接口练习_集合信息筛选

时间:2022-09-27 11:47:46浏览次数:49  
标签:Predicate return 函数 ArrayList 接口 字符串 String

常用的函数式接口_Predicate接口_默认方法or&negate:

需求:判断一个字符串长度是否大于5

如果字符串的长度大于5,那么返回false

如果字符串的长度不大于5,那么返回true

所以我们可以使用取反符号!对判断的结果进行取反

Predicate接口中有一个方法negate,也表示取反的意思

default Predicate<T> negate(){

return(t) -> !test(t);

}

/*
        定义一个方法,方法的参数,传递一个字符串
        使用Predicate接口判断字符串的长度是否大于5
     */
    public static boolean checkString(String s, Predicate<String> pre){
//        return !pre.test(s);
        return pre.negate().test(s);//等效于return !pre.test(s);
    }

 public static void main(String[] args) {
    //定义一个字符串
    String s = "abc111";
    //调用checkString方法,参数传递字符串和Lambda表达式
    boolean b = checkString(s,(String str)->{
        //判断字符串的长度是否大于5,并返回结果
        return str.length()>5;
    });
        System.out.println(b);
    }

 

 

 

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

 练习:集合信息筛选

数组当中有多余“名字”+“职业”的信息如下,

String[] array = {"永恩,战士","破败之王,刺客","卡莎,射手"};

请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,

需要同时满足两个条件:

1.必须为刺客

2.名字为4个字

分析:

1.有两个判断条件,所以需要使用两个Predicate接口,对条件进行判断

2.必须同时满足两个条件,所以可以使用and方法连续两个判断条件

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 = {"永恩,战士","破败之王,刺客","卡莎,射手"};
        //调用字符串的职业,判段是否为刺客
        ArrayList<String> list = filter(array,(String s)->{
            //获取字符串中的职业,判断是否为刺客
            return s.split(",")[1].equals("刺客");
        },(String s)->{
            //获取字符串中的名字,判段是否为4个字符
            return s.split(",")[0].length()==4;
        });
        //遍历集合
        for (String s : list){
            System.out.println(s);
        }

 

标签:Predicate,return,函数,ArrayList,接口,字符串,String
From: https://www.cnblogs.com/hungui/p/16733559.html

相关文章