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

@FunctionalInterface
public interface Function<T, R> {R apply(T t);default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {Objects.requireNonNull(before);return (V v) -> apply(before.apply(v));}default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {Objects.requireNonNull(after);return (T t) -> after.apply(apply(t));}static <T> Function<T, T> identity() {return t -> t;}
}

抽象方法:apply

Function 接口中最主要的抽象方法为: R apply(T t) ,根据类型T的参数获取类型R的结果。 使用的场景例如:将 String 类型转换为 Integer 类型。

public class Demo {private static void method(Function<String, Integer> function) {int num = function.apply("10");System.out.println(num + 20);}public static void main(String[] args) {method(s -> Integer.parseInt(s));}
}

当然,最好是通过方法引用的写法。

默认方法:andThen

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

该方法同样用于“先做什么,再做什么”的场景,和 Consumer 中的 andThen 差不多:

public class Demo {private static void method(Function<String, Integer> one,Function<Integer, Integer> two) {int num = one.andThen(two).apply("10");System.out.println(num + 20);}public static void main(String[] args) {method(str -> Integer.parseInt(str) + 10, i -> i *= 10);}
}

第一个操作是将字符串解析成为int数字,第二个操作是乘以10。两个操作通过 andThen 按照前后顺序组合到了一 起。

请注意,Function的前置条件泛型和后置条件泛型可以相同。

自定义函数模型拼接

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

  • String str = "张二三,20"
  • 将字符串截取数字年龄部分,得到字符串;
  • 将上一步的字符串转换成为int类型的数字;
  • 将上一步的int数字累加10,得到结果int数字。
public class Demo {public static void main(String[] args) {String str = "张二三,20";int age = getAgeNum(str, s -> s.split(",")[1],s -> Integer.parseInt(s),n -> n += 100);System.out.println(age);}private static int getAgeNum(String str, Function<String, String> one,Function<String, Integer> two,Function<Integer, Integer> three) {return one.andThen(two).andThen(three).apply(str);}
}

有帮到你的点赞、收藏一下吧

需要更多教程,微信扫码即可

常用函数式接口-Function相关推荐

  1. 常用函数式接口,Stream流

    01.第一章:常用函数式接口_Predicate判断接口: 1).java.util.Function.Prdedicate(函数式接口): 2).抽象方法:1).boolean test(T t) ...

  2. 常用函数式接口:Consumer、Predicate、Function的方法说明解练习

    目录 一.常用函数式接口:Consumer 二.Consumer接口练习:按要求打印信息 三. 常用函数式接口:Predicate 四.Predicate接口练习:筛选满足条件数据 五.常用函数式接口 ...

  3. 【java笔记】常用函数式接口(4):Funtion接口

    ​​​​​​​​​​​​​​[java笔记]常用函数式接口(1):Supplier接口_m0_52043808的博客-CSDN博客 [java笔记]常用接口(2):Consumer接口_m0_5204 ...

  4. 常用函数式接口及Stream流

    1.常用函数式接口 1.1Supplier接口 ​ 功能 ​ 生产型接口,接口的泛型指定成什么类型,就生产什么类型的数据(提供函数式接口,方便使用Lambda进行简化代码) ​ 抽象方法 ​ T ge ...

  5. java新特性-函数式接口-作为方法参数-作为方法的返回值-常用函数式接口-Supplier-Consumer-Predicate-Function

    文章目录 函数式接口 概念 函数式接口作为方法参数 函数式接口作为方法的返回值 常用函数式接口 Supplier接口 常用函数式接口 Consumer 函数式接口之 Predicate接口 常用接口之 ...

  6. Java8之函数式接口及常用函数式接口

    目录 函数式接口 1.概念 2.@FunctionalInterface 3.函数式接口使用方式 常用函数式接口 1.JDK提供的函数式接口举栗 2.Supplier 3.Consumer 4.Pre ...

  7. 【java笔记】常用函数式接口(1):Supplier接口

    [java笔记]常用接口(2):Consumer接口_m0_52043808的博客-CSDN博客 [java笔记]常用函数式接口(3):Predicate接口_m0_52043808的博客-CSDN博 ...

  8. Java8新特性概览——Stream特性,Lambda表达式,函数式接口Function、Predicate、Consumer,方法引用等概述

    概述: Java 8 新特性概述:https://www.ibm.com/developerworks/cn/java/j-lo-jdk8newfeature/index.html JAVA8 十大新 ...

  9. 常用函数式接口_Predicate

    函数式接口Predicate 软件包 java.util.function Interface Predicate<T> Predicate 接口用来判断传递的参数是否满足条件,并返回一个 ...

最新文章

  1. 【数据结构与算法】之深入解析“股票价格跨度”的求解思路与算法示例
  2. Hulu:如何实现大型比赛直播系统自动扩容
  3. bigdecimal如何做除法_公务员行测朴素逻辑解题技巧—代入排除法
  4. Apache Sqoop性能调整
  5. PHP Opcache(ZendOptimizerPlus)的安装配置详解
  6. TransE模型的简单介绍TransE模型的python代码实现
  7. 汽车智能电气技术分析
  8. 服务器安装找不到lsi驱动,IBM 服务器 SAS Raid LSI Windows2008 硬盘 驱动
  9. 漫谈程序员系列:别说“我已经很努力了”
  10. windows 下搭建邮件服务器
  11. UML中各图形或图标表示的意思
  12. 百度大字版APP支持语音搜索,老年人也能玩转互联网
  13. [渝粤教育] 浙江师范大学 敦煌文学艺术 参考 资料
  14. Https证书制作方法
  15. 那些Chrome不为人知的高效隐藏技巧,让你的浏览器好用10倍!
  16. latex 加载IEEE模板无法加载pdf图片问题
  17. MATLAB学习——数据类型(结构体、数组、单元数组、map容器类型)
  18. 已被清理的视频怎么恢复?微信过期视频怎么恢复
  19. 企业员工入职培训怎么做?培训内容分享
  20. 以“老师”命名的 Julia 语言,结合了 Python、R、C的优点,到底有多厉害!

热门文章

  1. 本想制衡经销商价格,不料成为黄牛货源地!茅台电商公司被迫解散!
  2. 14岁女孩模仿视频中易拉罐做爆米花意外身亡 博主办公室小野回应...
  3. 世界机器人大赛总决赛现场快报:多为中小学生
  4. 中国联通辟谣“不支持华为”:恶意诽谤 将通过法律手段维护权益
  5. 全互联+杜比影音ThinkPad X1 Carbon 2019全新上市
  6. 韩国造智能手机时代走向终结:昔日巨头纷纷关闭生产线或削减产量
  7. 苹果进行iPhone问世后最重大转型:硬件时代转互联网服务
  8. 呼叫前转业务在VoIP系统中的实现
  9. 你真明白 Python 装饰器么?
  10. mysql启动提示 access denied for user root@localhost(using password:YES) 解决办法总结