【java笔记】常用函数式接口(3):Predicate接口

本文详细介绍了Java util.function.Predicate接口的使用,包括其作用、抽象方法如test,以及默认方法如and、or和negate。通过实例展示了如何利用Predicate进行数据判断和集合信息筛选,例如根据字符串长度和是否包含特定字符进行过滤。此外,还提供了使用and方法组合多个条件的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候需要对某种类型的数据进行判断,从而得到一个boolean值结果,这是可以使用java,util.function.Predicate<T>接口

作用:

对某种数据类型的数据进行判断,返回一个boolean值

抽象方法:

boolean test(T t):符合条件,返回true

public class Demo {
    public static void main(String[] args) {
   String s="abcdse";
        System.out.println(checkString(s,(m)->m.length()>5));
    }
    public static boolean  checkString(String s, Predicate<String>pre) {
        return pre.test(s);
    }
}

默认方法:

and

将两个Predicate条件用“与”逻辑连接起来实现“并且”的效果时,可以使用default方法and

例:有两个条件:长度>5并且包含a

未使用and

public class Demo {
    public static void main(String[] args) {
   String s="abcdse";
        System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
    }
    public static boolean  checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
        return pre1.test(s)&&pre2.test(s);
    }
}

使用and

public class Demo {
    public static void main(String[] args) {
   String s="abcdse";
        System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
    }
    public static boolean  checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
        return pre1.and(pre2).test(s);
    }
}

or

与and类似,默认方法or实现逻辑关系中的或

public class Demo {
    public static void main(String[] args) {
   String s="abcdse";
        System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
    }
    public static boolean  checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
        return pre1.or(pre2).test(s);
    }
}

negate:

取反

public class Demo {
    public static void main(String[] args) {
   String s="abcdse";
        System.out.println(checkString(s,(m)->m.length()>5,(a)->a.contains("a")));
    }
    public static boolean  checkString(String s, Predicate<String>pre1,Predicate<String>pre2) {
        return pre1.or(pre2).test(s);
    }
}

习题:集合信息筛选

数组中有“姓名+性别”的信息,筛选条件:(1)女(2)名字两字

public class Demo {
    public static void main(String[] args) {
   String[]arr={"张三,男","王恰为,女","李四,女"};
   ArrayList<String>alist=fliter(arr,(m)->m.split(",")[0].length()==2,(m)->m.split(",")[1].equals("女"));
   for(String s:alist){
       System.out.println(s);
     }
    }
    public static ArrayList<String>fliter(String[]s, Predicate<String>pre1,Predicate<String>pre2) {
        ArrayList<String>list=new ArrayList<>();
        for(String m:s){
            if(pre1.and(pre2).test(m)){
               list.add(m);
            }
        }
        return list;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值