常用的函数式接口

1、Supplier接口
java.util.function.Supplier接口紧包含一个无参的方法:T get()
用来获取一个泛型参数制定类型的对象数据
Supplier接口被称为生产型接口,制定接口的泛型是什么类型,呢么接口中的get方法就会生产什么类型的数据
代码示例:

    public static void main(String[] args) {
       String str1 = getString(new Supplier<String>() {
           @Override
           public String get() {
               return "马尔扎哈";
           }
       });
       
       String str2 = getString(() -> "古力娜扎");
        System.out.println(str1 + str2);
    }

    public static String getString(Supplier<String> supp) {
       return supp.get();
    }

2、 Consumer接口
java.util.function.Consumer接口正好与Supplier接口相反,不是生产数据,而是消费数据,其数据类型由泛型决定。

2.1 Consumer接口中包含抽象方法void accept(T t), 意为消费一个指定泛型的数据。
Consumer接口是一个消费型接口,泛型执行什么类型,就可以使用accept方法消费什么类型的数据,至于具体怎么消费(使用),需要自定义(输出,计算····)
代码示例:

    public static void main(String[] args) {
        show("古力娜扎", str -> {
            String name = new StringBuilder(str).reverse().toString();
            System.out.println(name);
        });
    }
    public static void show (String str, Consumer<String> con) {
        con.accept(str);
    }

2.2 Consumer接口的默认方法andThen
作用:需要两个Consumer接口,可以把两个Consumer接口组合到一起,再对数据进行消费
例:
Consumer con1
Consumercon2
String s = “hello”;
con1.accept(s);
con2.accept(s);
连接两个Consumer接口,再进行消费
con1.andThen(con2).accept(s); 谁写前边谁先消费
代码示例:

    public static void main(String[] args) {
        show("Hello", t ->
            System.out.println(t.toUpperCase()), str -> {
            String name = new StringBuilder(str).reverse().toString();
            System.out.println(name);
        });
    }
    public static void show (String str, Consumer<String> con1, Consumer<String> con2) {
        // con1.accept(str);
        // con2.accept(str);
        // 使用andThen方法连接两个Consumer接口再调用accept方法进行消费,等同于上边分别消费
        con1.andThen(con2).accept(str); // con1连接con2,限制性con1消费数据,再消费con2
    }

3、Predicate接口
java.util.function.Predicate接口
作用:对某种数据类型的数据进行判断,结果返回一个boolean值
3.1 Predicate接口中的抽象方法:
boolean test(T t) :用来对指定数据类型数据进行判断的方法
结果:符合条件true,不符合条件,返回false
代码示例:

    public static boolean method (String str, Predicate<String> pre) {
        return pre.test(str);
    }

    public static void main(String[] args) {
        boolean result = method("asc", str -> str.length() > 5);
        System.out.println(result);

    }

3.2 默认方法
3.2.1 and
表示并且关系,也可以用于连接两个判断条件
代码示例:

    public static boolean method (String str, Predicate<String> pre1, Predicate<String> pre2) {
        // return pre1.test(str) && pre2.test(str);
        return pre1.and(pre2).test(str); // 等同于上边的代码
    }

    public static void main(String[] args) {
        boolean result = method("asvrvrc", str -> str.length() > 5, str -> str.contains("a"));
        System.out.println(result);

    }

3.2.2 or
表示或者关系,也可以用于连接两个判断条件
代码示例:

    public static boolean method (String str, Predicate<String> pre1, Predicate<String> pre2) {
         // return pre1.test(str) || pre2.test(str);
        return pre1.or(pre2).test(str); // 等同于上边的代码
    }

    public static void main(String[] args) {
        boolean result = method("asv", str -> str.length() > 5, str -> str.contains("a"));
        System.out.println(result);

    }

3.3.3 negate
表示取反关系
代码示例:

    public static boolean method (String str, Predicate<String> pre) {
        // return !pre.test(str);
         return pre.negate().test(str); // 等同于上边的代码
    }

    public static void main(String[] args) {
        boolean result = method("asv", str -> str.length() > 5);
        System.out.println(result);

    }

4、 Function接口
java.util.function.Function<T, R>
作用:接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件。

4.1 Function接口中最主要的抽象方法为R apply(T t), 根据类型T的参数获取类型R的结果。
代码示例:

    // 将一个字符串整数转换为Integer类型并返回
    public static Integer method (String str, Function<String, Integer> fun) {
        return fun.apply(str);
    }

    public static void main(String[] args) {
        Integer in = method("110", str -> Integer.parseInt(str));
        System.out.println(in);
    }

4.2 默认方法
4.2.1 andThen
作用:用来进行组合操作
代码示例:

    /*
        需求:
	        把String类型的“123”转换为integer类型,把转换后的结果加10,
	        把增加之后的Integer类型的数据,转换为String类型
    */
    public static String method (String str, Function<String, Integer> fun1, Function<Integer, String> fun2) {
        return fun1.andThen(fun2).apply(str);
    }

    public static void main(String[] args) {
        String result = method("110", str -> Integer.parseInt(str) + 10, i -> i.toString());
        System.out.println(result);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值