常用的函数式接口_Function接口_默认方法andThen与常用的函数式接口_Function接口练习_自定义函数模型拼接

常用的函数式接口_Function接口_默认方法andThen

默认方法:andThen

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

  以下的就是andThen源代码

 default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }

 该方法同样先做什么,再做什么的场景,和Consumer中的andThen差不多;

package com.FunctionalInterface.Function;

import java.util.function.Function;

/*
    Function接口中的默认方法andThen:用来进行组合操作

    需求:
         把String类型的"123",转换为Integer类型,把转换后的结果加10
         把增加之后的Integer类型的数据,转换为String类型

    分析:
         转换了两次
         第一次把String类型转换为了Integer类型
             所以我们可以使用Function<String,Integer> fun1
                 Integer i = fun1.apply("123")+10;
         第二次把Integer类型转换为String类型
             所以我们可以使用Function<Integer,String> fun2
                 String s = fun2.apply(i);
         我们可以使用andThen方法,把两次转换组合在一起使用
             String s = fun1.andThen(fun2).apply("123");
             fun1先调用apply方法,把字符串转换为Integer
             fun2再调用apply方法,把Integer转换为字符串
 */
public class Demo02Function_andThen {
    /*
       定义一个方法
       参数传递一个字符串类型的整数
       参数再传递两个Function接口
           一个泛型使用Function<String,Integer>
           一个泛型使用Function<Integer,String>
     */
    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 i)->{
            //把整数转换为字符串
            return i+"";
        });

        //优化Lambda表达式
        change(s,str-> Integer.parseInt(str)+10, i-> i+"");
    }
}

 

常用的函数式接口_Function接口练习_自定义函数模型拼接

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

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

  String str = "赵丽颖,20";

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

  ⒉.将上一步的字符串转换成为int类型的数字;

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

  分析:

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

    Function<String,String> “赵丽颖,22”->“22”

    2.将上一步的字符串转换称为int类型的数字
    Function<String,Integer> “22”->22

    3.将上一步的int数字累加100,得到结果int数字。
    Function<Integer,Integer> 22->122

 1 package day01.Demo01_Day016;
 2 
 3 import java.util.function.Function;
 4 
 5 /*
 6      练习:自定义函数模型拼接
 7      题目
 8      请使用Function进行函数模型的拼接,按照顺序需要执行的多个函数操作为:
 9          String str = "赵丽颖,20";
10 
11      分析:
12      1.将字符串截取数字年龄部分,得到字符串;
13            Function<String,String> "赵丽颖,22"->"22"
14      2.将上一步的字符串转换称为int类型的数字
15            Function<String,Integer> "22"->20
16      3.将上一步的int数字累加100,得到结果int数字。
17            Function<Integer,Integer>  20->120
18    */
19 public class Demo03Test {
20     /*
21       定义一个方法
22       参数传递包含姓名和年龄的字符串
23       参数再传递3个Function接口用于类型转换
24      */
25     public static Integer change(String s, Function<String,String> fun1,
26                                  Function<String,Integer> fun2,Function<Integer ,Integer> fun3){
27         //使用andThen方法把三个转换组合在一起
28         return fun1.andThen(fun2).andThen(fun3).apply(s);
29 
30     }
31 
32     public static void main(String[] args) {
33         //定义一个字符串
34         String str = "神宫千夏,22";
35         //调用change方法,参数传递字符串和Lambda表达式
36         Integer num = change(str, (String s) -> {
37             //"神宫千夏,22"->"22"
38             return s.split(",")[1];
39         }, (String s) -> {
40             // "22"->22
41             return Integer.parseInt(s);
42         }, (Integer i) -> {
43             //22->122
44             return i + 100;
45         });
46         System.out.println(num);
47     }
48 }

 

posted @ 2022-10-11 14:31  zj勇敢飞,xx永相随  阅读(26)  评论(0编辑  收藏  举报