函数式接口-常见函数式接口-Function接口

常见函数式接口

JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供

Function接口

Function<T,R>接口用于根据一个类型的数据得到另一个类型的数据 前者称为前置条件,后置条件

抽象方法:apply

Function接口中的最主要的抽象方法为

R apply(T t):根据类型T的参数获取类型R的结果

使用场景例如:将String类型转换为Integer类型

代码:

复制代码
 /*
    定义一个方法
    方法的参数传递一个字符串类型的整数
    方法的参数传递一个Function接口 泛型使用<String,Integer>
    使用Function接口中的方法apply 把字符串类型的整数 转换为Integer类型的整数
     */
public class Demo01Function {
    public static void change(String s, Function<String,Integer> fun){
        Integer apply = fun.apply(s);
        System.out.println(apply);
    }

    public static void main(String[] args) {
        // 定义一个字符串类型的整数
        String s = "1234";
        // 调用change方法 传递字符串类型的整数 和Lambda表达式
        change(s,(String str) -> {
            return Integer.valueOf(str);
        });
    }
}
复制代码

默认方法:andThen

Function接口中有一个默认的andThen方法 用来进行组合操作

代码:

 
复制代码
/*
    定义一个方法
    参数串一个字符串类的整数
    参数在传递两个Funcion接口
    一个泛型使用Function<String,Integer>
    一个泛型使用Function<Integer,String>
     */
public class Demo02Function {
    public static void change(String s, Function<String, Integer> fun1, Function<Integer, String> fun2) {
        String ss = fun1.andThen(fun2).apply(s);
        System.out.println(ss);
    }

    public static void main(String[] args) {
        // 定义一个字符串类型的整数
        String s = "123";
        // 调用change方法 传递字符串和两个Lambda表达式
        change(s, (String str) -> {
            // 把字符串转换为整数+10
            return Integer.parseInt(str) + 10;
        }, (Integer o) -> {
            // 把整数转换为字符串
            return o + "";
        });

        // 优化lambda
        // 调用change方法 传递字符串和两个Lambda表达式
        change(s, (str) -> {
            // 把字符串转换为整数+10
            return Integer.parseInt(str) + 10;
        }, (o) -> {
            // 把整数转换为字符串
            return o + "";
        });
    }
}
复制代码

练习-自定义函数模型拼接

题目:

请使用Function进行函数模型的拼接 按照顺序需要执行的多个函数操作为:

Sting str="张三,20";

1.将字符串截取数字年龄部分 得到字符串

2.将上一步的字符串转换为int类型的数学

3.将上一步的int数字累加100 得到结果int数字

代码:

复制代码
/*
    定义一个方法
    参数传递包含名字和年龄的字符串
    参数再传递3个Function接口用于类型转换
     */
public class Demo03Function {
    public static int change(String s, Function<String,String> fun1,
                             Function<String,Integer> fun2,Function<Integer,Integer> fun3){
        // 使用andThen方法把三个转换组合到一起
        return fun1.andThen(fun2).andThen(fun3).apply(s);
    }

    public static void main(String[] args) {
        // 定义一个字符串
        String str="张三,20";
        // 调用change方法 参数传递字符串和3个lambda表达式
        int c = change(str, (String s) -> {
            return s.split(",")[1];
        }, (String s) -> {
            return Integer.parseInt(s);
        }, (Integer i) -> {
            return i + 100;
        });
        System.out.println(c);
    }
}
 
 
posted @ 2022-10-17 17:19  想见玺1面  阅读(117)  评论(0编辑  收藏  举报