注:写这个文档只是为了方便加深记忆,加强理解,重点关注两个default方法中泛型【V】。

JDK8作为一个还在维护阶段的长期版本,势必会在企业应用中占据相当大的市场份额,所以还是以JDK8作为例子的背景。(下一个长期版本是今年9月发布的JDK11)

函数接口定义:

Interface Function<T,R>

这里稍稍说明一下接口中的<T,R>泛型的含义

  • T 函数的输入类型
  • R 函数的输出类型

接口内还有第三个泛型,重点关注

  • V after函数的输出类型和before函数的输入类型

接口中定义了4个方法,其中apply是抽象方法,其余的三个是接口自带,不需要实现。这里定义当前函数的名称为currentFunc。

  • R apply(T t)

  此方法为函数的执行入口,传入T,输出R。所有标注了@FunctionalInterface注解的接口,最好都按照这个规范来定义此方法。

  • default <V> Function<T, V> andThen(Function<? super R, ? extends V> after)

  此方法的参数一个后置函数,执行顺序:after.apply( currentFunc.apply(t))。这里我们看看after函数的定义:Function<? super R, ? extends V> after,入参是R,输出是V,也就是说,currentFunc函数的输出[R]直接作为了after函数的入参,最终[andThen]方法的返回值:Function<T, V>,T -> currentFunc的入参,V -> after的输出类型。有过linux命令操作的朋友对此应该比较熟悉,类似于linux的管道命令,前者的输出直接当成后续命令的输入,如:cat test.txt | grep 'XXXX'

  • default <V> Function<V, R> compose(Function<? super V, ? extends T> before)

  此方法的参数一个前置函数,执行顺序:currentFunc.apply( before.apply(t)),before的入参类型为V,输出值类型为T;其中before的输出值[T]直接作为currentFunc的入参。[compose]方法返回函数:Function<V, R>,V -> before的入参,R -> currentFunc的输出类型。

  • static <T> Function<T, T> identity()

  此静态方法的作用比较单一,返回函数定义中的入参【T】

JDK8 - Function介绍的更多相关文章

  1. ABAP CDS Table Function介绍与示例

    Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS. 如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种 ...

  2. boost::function 介绍

    本片文章主要介绍boost::function的用法. boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象. 1.  介绍 Boost.Func ...

  3. Oracle管道函数(Pipelined Table Function)介绍

    一 概述: 1.管道函数即是能够返回行集合(能够使嵌套表nested table 或数组 varray)的函数,我们能够像查询物理表一样查询它或者将其  赋值给集合变量. 2.管道函数为并行运行,在普 ...

  4. jdk8 Function

    例子 1: // 定义function Function<String, String> fun = parm -> { // 这里是定function中的逻辑 return Str ...

  5. std::function介绍 -转载

    类模版std::function是一种通用.多态的函数封装.std::function的实例可以对任何可以调用的目标实体进行存储.复制.和调用操作,这些目标实体包括普通函数.Lambda表达式.函数指 ...

  6. boost::function和boost::bind 介绍

    一. boost::function介绍 原文:http://www.cnblogs.com/sld666666/archive/2010/12/16/1907591.html 本片文章主要介绍boo ...

  7. C++11中的std::function

    看看这段代码 先来看看下面这两行代码: std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::fun ...

  8. 【转】C++11中的std::function

    原文地址:http://www.jellythink.com/archives/771 看看这段代码 先来看看下面这两行代码: std::function<void(EventKeyboard: ...

  9. Java函数式接口Function

    Function 提供了一个抽象方法  R apply(T t) 接收一个参数 返回 一个值,还有两个默认方法和一个静态方法 compose 是一个嵌套方法,先执行before.apply() 得到运 ...

随机推荐

  1. s4-3 CSMA

    载波侦听多路访问协议  CSMA:Carrier Sense Multiple Access 特点:"先听后发" 改进ALOHA协议的侦听/发送策略  分类 非持续式 持 ...

  2. python3.4读取excel数据绘图

    #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...

  3. BT1120时序,可以用于自测用

    module bt1120_gen #( , , , , , )( input clk, input rst_p, // input [5:0] h_sync_pixcels, // input [5 ...

  4. Docker Swarm集群部署

    一.系统环境 1)服务器环境 节点名称 IP 操作系统 内核版本 manager 172.16.60.95 CentOs7 4.16.1-1.el7.elrepo.x86_64 node-01 172 ...

  5. Java数据类型、操作符、表达式

    基本与C#相同,因C#从Java学的   如操作符     对象的Equals方法,比较两个对象的内容是否相等.     ==是比较是否引用同一对象.

  6. day33(sql)

    操作数据库 增: create database 数据库名 character set utf8 删 drop database 数据库名称 改 alter database 数据库名称 charac ...

  7. 3D打印切片软件介绍

    熟悉3D打印的流程的人都知道,在建立了3D模型以后要就进行切片,但是什么是切片呢?切片实际上就是讲3D模型转化为3D打印机本身可以执行的代码,G代码,M代码. 3D打印流程 今天我们简要的介绍3款切片 ...

  8. kafka_shell操作

    单机版 开启进程: ./bin/kafka-server-start.sh config/server.properties 查看topic列表: ./bin/kafka-topics.sh --li ...

  9. centos救援模式实验笔记

    1.  首先在BIOS中把启动选项设置成DVD光驱启动或者USB启动也是可以的 2.  从光盘启动之后再出现的选项中选择“Rescue installed system”然后按回车确认,具体图下图: ...

  10. 分形之二叉树(Binary Tree)

    上一篇文章讲的是分形之树(Tree),这一篇中将其简化一下,来展示二叉分形树的生长过程. 核心代码: static void FractalBinaryTree(const Vector3& ...