第九天Java基础(常用的函数接口)

本文深入解析Java中常用的函数接口,包括Supplier、Consumer、Predicate和Function的使用方法及实例。探讨了接口的定义、实现方式及Lambda表达式的应用,通过具体代码示例展示了如何在实际编程中有效利用这些接口。

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

1.常用的函数接口

1.1 自定义函数接口的方式

1.只有一个抽象方法的接口。
函数式接口,在使用Lambda表达式实现时,一般延迟加载重写的内容。当实现内部的代码被使用时,代码才会执行。

1.2 常用的函数接口

1.supplier接口,生产数据
重写get(),返回泛型类型的数据

//1.定义一个方法生产数据
public static int getMax(Supplier<Integer> map){
        return map.get();
    }
    public static void main(String[] args) {
        int []ints = {100,2,-5,55,-100};
        int max = getMax(new Supplier<Integer>() {
            @Override
            public Integer get() {
            //2.如何生产自定义
                int max = ints[0];
                for (int i : ints) {
                    if(i>max){
                        max = i;
                    }
                }
                return max;
            }
        });
        System.out.println(max);
    }

2.Consumer接口,消费数据
重写accept(String str)方法

//1.定义一个方法,消费数据,不返回数据
    public static void getString (String name , Consumer<String> cs){
        cs.accept(name);
    }

    public static void main(String[] args) {
        getString("赵丽颖",(name)->{
            //2.自定义消费方式
            String str = new StringBuffer(name).reverse().toString();
            System.out.println(str);
        });
    }

andThan()方法的使用

 //1.对于数据str来说,可能需要两种消费方式,所以传递两个Consumer
    public static void outStirng(String str , Consumer<String> con1,Consumer<String> con2){
        //2.Consumer执行方式一
        con1.accept(str);
        con2.accept(str);
        //3.也可以用andThen进行连接
        con1.andThen(con2).accept(str);
    }
    public static void main(String[] args) {
        outStirng("AbCd",(t)->{
            System.out.println(t.toUpperCase());
        },(t)->{
            System.out.println(t.toLowerCase());
        });
    }

小练习

 public static void outArray(String[] str, Consumer<String> con1, Consumer<String> con2){
        for (String s : str) {
            con1.andThen(con2).accept(s);
        }
    }
    public static void main(String[] args) {
        String[] str = {"迪丽热巴,女","古力娜扎,女","马儿扎哈,男","卡发卡,男"};
        outArray(str,(t)->{
            String[] strs = t.split(",");
            System.out.print("姓名:"+strs[0]+",");
        },(t)->{
            String[] strs = t.split(",");
            System.out.println("性别:"+strs[1]+"。");
        });
    }

3.Predicate接口,判断数据,你给我一个数据,我判断,返回boolean
重写test()方法,返回boolean
使用方式和前面一样

public static boolean checkString (String str, Predicate<String> pred){
        return pred.test(str);
    }
    public static void main(String[] args) {
        boolean b = checkString("ABCDEF",(t)->{
            return t.length()==5;
        });
        System.out.println(b);
    }

方法:与或非

  1. and();//可以连接多个判断条件
    具体的写法
    return pre1.and(per2).test(str);

    return pre1.test(str) && pre2.test(str);等价
    2.or();
    return pre1.or(per2).test(str);

    return pre1.test(str) || pre2.test(str);等价
    3.negate();
    return pre1.negate().test(str);

    return !pre1.test(str);等价
    小练习:把符合两个条件的数组放入集合中
public static ArrayList<String> criterionArrayString(String[]str , Predicate<String> pre1,Predicate<String> pre2){
        ArrayList<String> arr = new ArrayList<>();
       for (String s : str) {
           boolean b = pre1.and(pre2).test(s);
           if (b){
               arr.add(s);
           }
       }
        return arr;
   }
    public static void main(String[] args) {
        String[] str = {"迪丽热巴,女","古力娜扎,女","马儿扎哈,男","卡发卡,男"};
        ArrayList<String> arr = criterionArrayString(str, (t) -> {
            String[] split = t.split(",");
            if ("女".equals(split[1])) {
                return true;
            }
            return false;
        }, (t) -> {
            String[] split = t.split(",");
            if (split[0].length() == 4) {
                return true;
            }
            return false;
        });
        System.out.println(arr);
    }

4.Function<T,R>接口,类型转化接口
方法apply(T t);返回R类型的数据
默认方法
andThan(),与前面的一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值