作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

早先我写了一篇《函数式接口》,探讨了Java8中函数式接口的用法。如果你正在浏览Java8的API,你会发现java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖。在这篇文章中,我会简单描述Function接口,该接口目前已发布在java.util.function中。

Function接口的主要方法:

R apply(T t) – 将Function对象应用到输入的参数上,然后返回计算结果。

default ‹V› Function‹T,V› – 将两个Function整合,并返回一个能够执行两个Function对象功能的Function对象。

译者注:Function接口中除了apply()之外全部接口如下:

default <V> Function<T,V> andThen(Function<? super R,? extends V> after) 返回一个先执行当前函数对象apply方法再执行after函数对象apply方法的函数对象。

default <V> Function<T,V> compose(Function<? super V,? extends T> before)返回一个先执行before函数对象apply方法再执行当前函数对象apply方法的函数对象。

static <T> Function<T,T> identity() 返回一个执行了apply()方法之后只会返回输入参数的函数对象。

本章节将会通过创建接受Function接口和参数并调用相应方法的例子探讨apply方法的使用。我们同样能够看到API的调用者如何利用lambda表达式替代接口的实现。除了传递lambda表达式之外,API使用者同样可以传递方法的引用,但这样的例子不在本篇文章中。

如果你想把接受一些输入参数并将对输入参数处理过后的结果返回的功能封装到一个方法内,Function接口是一个不错的选择。输入的参数类型和输出的结果类型可以一致或者不一致。

一起来看看接受Function接口实现作为参数的方法的例子:

01 public class FunctionDemo {
02  
03     //API which accepts an implementation of
04  
05     //Function interface
06  
07     static void modifyTheValue(int valueToBeOperated, Function<Integer, Integer> function){
08  
09         int newValue = function.apply(valueToBeOperated);
10  
11         /*     
12          * Do some operations using the new value.     
13          */
14  
15         System.out.println(newValue);
16  
17     }
18  
19 }

下面是调用上述方法的例子:

01 public static void main(String[] args) {
02  
03     int incr = 20;  int myNumber = 10;
04  
05     modifyTheValue(myNumber, val-> val + incr);
06  
07     myNumber = 15;  modifyTheValue(myNumber, val-> val * 10);
08  
09     modifyTheValue(myNumber, val-> val - 100);
10  
11     modifyTheValue(myNumber, val-> "somestring".length() + val - 100);
12  
13 }

你可以看到,接受1个参数并返回执行结果的lambda表达式创建在例子中。这个例子的输入如下:

1 30
2  
3 150
4  
5 -85
6  
7 -75

Function接口 – Java8中java.util.function包下的函数式接口相关推荐

  1. java.util接口_Java 8中java.util.function包中的谓词和使用者接口

    java.util接口 在上一篇文章中,我写了关于Function接口的内容 ,它是java.util.package的一部分. 我还提到了Predicate接口,它是同一包的一部分,在这篇文章中,我 ...

  2. java.util接口_函数接口– Java 8中java.util.function包中的函数接口

    java.util接口 我以前写过有关功能接口及其用法的文章. 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Su ...

  3. Java 8中java.util.function包中的谓词和使用者接口

    在我以前的文章中,我写了关于Function接口的内容 ,它是java.util.package的一部分. 我还提到了Predicate接口,它是同一包的一部分,在这篇文章中,我将向您展示如何使用Pr ...

  4. 函数接口– Java 8中java.util.function包中的函数接口

    我以前写过有关功能接口及其用法的文章. 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Supplier,Consu ...

  5. java.util.regex包下的Pattern和Matcher详解(正则匹配)

    java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果 ...

  6. jdk8中java.util.concurrent包分析

    并发框架分类 1. Executor相关类 Interfaces. Executor is a simple standardized interface for defining custom th ...

  7. java concurrent 框架,java.util.concurrent 包下的 Synchronizer 框架

    看完书 java concurrency in practice 当然是想找点啥好玩的东东玩玩. 当看到了Doug Lee 的论文 << The java.util.concurrent ...

  8. java.util 常见_Java基础知识-java.util.concurrent包下常见类的使用

    一,Condition 一个场景,两个线程数数,同时启动两个线程,线程A数1.2.3,然后线程B数4.5.6,最后线程A数7.8.9,程序结束,这涉及到线程之间的通信. public classCon ...

  9. Java工具包工具类,java.util.concurrent 包下工具类的使用

    CountDownLacth 的使用 常用于监听某些初始化操作,等初始化执行完毕,通知主线程继续执行. 先看示例代码: public class UseCountDownLatch { public ...

最新文章

  1. 震惊!线上四台机器同一时间全部 OOM,到底发生了什么?
  2. 【计算理论】计算复杂性 ( 小 O 记号 | 严格渐进上界 | 分析算法的时间复杂度 )
  3. python 字符串去除中文
  4. 《大话设计模式》读书笔记-第8章 工厂方法模式
  5. mysql开源内库_将内裤穿在外面的男人(mysql)
  6. Anaconda套件,精簡版miniconda
  7. 不一样的图片加载方式
  8. 【大会】AI向多媒体各细分场景渗透
  9. 【原理+实战+视频+源码】docker映射端口教程
  10. Go embed 简明教程
  11. JVM类加载机制详解
  12. getchwd() 函数返回当前工作目录。
  13. Codeforces Round #666 (Div. 2)D. Stoned Game(博弈问题)
  14. java 如何去掉http debug日志_Java高手如何搭建高效易用的日志系统
  15. ajax调用网易云APi遇到跨域问题
  16. PHP腾讯云短信接口
  17. 苹果手机网页选择框 下拉框点击放大处理
  18. 笔记-中项/高项学习期间的错题笔记2
  19. 1、cell 内容最大长度 The maximum length of cell contents (text) is 32767 characters
  20. 畅捷通T+ v2接口 发布IIS报错 RsaUsingSha with PSS

热门文章

  1. Vue的表单组件之复选框
  2. jvm执行引擎全解,java解释器即时编译器,全都讲明白
  3. 工程实践规模化推进要点分析
  4. 7-28作业直接刷一下
  5. oracle转64编码,[转]将oracle数据库的编码变成utf-8
  6. ansys参数化编程与命令手册_查看Bash手册--man命令
  7. matlab高级图形设计实训上机答案,Matlab实验第一次实验答案[共8页]
  8. 神策数据荣登《中国企业家》“未来之星”榜单
  9. 【PPT 下载】神策 2017 数据驱动大会干货限时分享!
  10. 英特尔在中国投资55亿美元非易失性存储项目投产