Function

简介: Function

应该笑着面对生活,不管一切如何。——伏契克

java8Function这个类

它有一个@FunctionalInterface注解

这里举个例子

首先我们看apply

解释为

表示接受一个参数并产生一个结果的功能。

这是一个功能性的接口,其功能性的方法是apply(Object) 。

简单来说,你可以使用它里面的apply方法,这个方法参数为lambda写法的函数,返回值为函数执行的结果

我们实际写法如下

执行了apply能调用getUsername返回我们的usernameruben

源码这里的T为我们实际写的UserR为返回结果String

public class FunctionDemo {
    public static void main(String[] args) {
        System.out.println(getUsername(User::getUsername, user));
    }
    public static String getUsername(Function<User, String> func, User user) {
        return func.apply(user);
    }
}

接下来是andThen,简单来说我们要在apply之后做点啥就可以使用它,这里举例为获取用户名长度

public class FunctionDemo {
    public static void main(String[] args) {
        System.out.println(getNameLength(User::getUsername, user));
    }
    public static int getNameLength(Function<User, String> func, User user) {
        return func.andThen(String::length).apply(user);
    }
}

源码也超级简单

既然有在方法执行之后做操作,那么也有之前的,例如我们执行方法getUsername()之前给它赋个值

public class FunctionDemo {
    public static void main(String[] args) {
        System.out.println(getAchaoName(User::getUsername, user));
    }
    public static String getAchaoName(Function<User, String> func, User user) {
        return func.compose(obj -> {
            User tempUser = (User) obj;
            tempUser.setUsername("achao");
            return tempUser;
        }).apply(user);
    }
}

然后是源码

还有最后一个identity

官方解释:返回一个总是返回其输入参数的函数

简单点,就是Function的给定类型的实例

例如我们给定一个User类型,调用里面的apply,可以返回一个User的实例

Function<User, User> identity = Function.identity();
User user = identity.compose(obj -> {
    User tempUser = (User) obj;
    tempUser.setUsername("alex");
    return tempUser;
}).andThen(obj -> {
    obj.setUsername("ruben");
    return obj;
}).apply(new User("steve", "xxxxxx"));

这里在composeapplyandThen中分别给username赋值,但是最终的userruben,也就是我们最后执行的andThen覆盖了前面的

相关文章
|
JSON JavaScript 前端开发
js树形菜单 如何用递归制作一个简单的树形菜单
js树形菜单 如何用递归制作一个简单的树形菜单
301 0
|
JavaScript 前端开发
|
资源调度 分布式计算 安全
伏羲—阿里云分布式调度系统
在12月12日的云栖社区在线培训上,“飞天”分布式系统核心开发人员陶阳宇分享了《伏羲-阿里云分布式调度系统》。他主要从伏羲系统架构、任务调度、资源调度、容错机制、规模挑战、安全与性能隔离方面介绍了伏羲分布式系统架构和设计理念。
23655 0
|
12月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
windbg分析 IRQL_NOT_LESS_OR_EQUAL 蓝屏问题
本文通过windbg分析了电脑出现的IRQL_NOT_LESS_OR_EQUAL蓝屏问题,并尝试了多种解决方法,最终通过硬件清理暂时解决了问题。
1397 0
windbg分析 IRQL_NOT_LESS_OR_EQUAL 蓝屏问题
|
Linux
Linux的权限
Linux的权限
219 0
不怕面试再问HashMap,一次彻底地梳理(原理+手写实现)
朋友们又见面了,你是不是还在面试时被面试官问懵HashMap?不会手写实现一个简单HashMap?看完这篇文章你再不会算我输! 提示:以下是本篇文章正文内容,案例仅供参考
|
虚拟化
VMware Workstation 不可恢复错误: (vcpu-0) vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123
使用VMware® Workstation 11.1.2 build-2780323安装MacOS系统时出现以下错误: VMware Workstation 不可恢复错误: (vcpu-0)  vcpu-0:VERIFY  vmcore/vmm/main/physMem_monitor.c:1123 日志文件位于“H:\VMware\OSX\vmware.log”中。
3368 0
|
SQL 大数据 数据挖掘
大数据Hive函数高阶 1
大数据Hive函数高阶
288 0
|
存储 SQL 关系型数据库
SQL 存储过程 procedure 讲解+代码实例
SQL 存储过程 procedure 讲解+代码实例
SQL 存储过程 procedure 讲解+代码实例