常用的函数式接口_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 }